//g++ -Wall -o 1 1.cpp
//./1
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n;
cin>>n;
if (n == 0){
cout<<0;
return 0;
}
else{
int a1 = 0 , a2 = 1;
int c = 1;
while(a2<=n){
if (a2==n){
cout<<c;
return 0;
}
a1 = a2;
a2 = a1+a2;
c++;
}
cout<<-1;
return 0;
}
}
Объяснение:
Смотрим на диаграмму, видим, что у нас тут 4 части: Одна большая (половина всей окружности), вторая (1/4 от всей окружности) и еще две половинки (1/8 от всей окружности каждая)
Давай теперь посчитаем наши значения в ячейках A2:D2
A2 = (6+6)/3 = 12/3 = 4
B2 = 4 - 2 = 2
C2 = 2 / 2 = 1
Так, ну теперь думаем, что за число нам нужно получить, чтобы получилось соответствие с окружностью.
Сразу ясно, 4 - большая часть, а ее половина это 2 и еще одну ячейка, которая равна 1, получается, что у нас не хватает только части, которая равна 1/8 окружности, которая равна 1, просто ищем формулу, которая нам даст единицу.
=C1 / 2 = 3 - не подходит
=C2/B2*4 = 1/2 * 4 = 2 - не подходит
=D1 * 2 = 4 * 2 = 8 - не подходит
=C2 = 1 - подходит
Давайте проверим тогда, если половинка это 4, то вся окружность это 8
4 + 2 + 1 + 1 = 8, а это значит, что мы всё верно решили.
ответ: =C2
Остались вопросы - добро в комментарии.
Поделитесь своими знаниями, ответьте на вопрос:
N = 33;
Var
A:array[1..N] of integer;
i:integer;
Begin
Randomize;
Write('Исходный массив:');
For i:= 1 to N do
Begin
A[i]:=random(100000)-50000;
Write(' ',A[i]);
End;
WriteLn;
WriteLn;
Write('Трёхзначные числа:');
For i:= 1 to N do
if (99<Abs(A[i]))and(Abs(A[i])<1000) then Write(' ',A[i]);
WriteLn;
Write('Номера четырёхзначных чисел:');
For i:= 1 to N do
if (999<Abs(A[i]))and(Abs(A[i])<10000) then Write(' ',i)
End.
Пример:
Исходный массив: 12916 46699 20251 -36637 -14335 -33817 -25279 -5819 -6258 23375 15258 1264 10987 42877 9875 3515 -22647 -791 47876 -319 -23437 -43546 -46174 -29378 -17999 -37325 -10130 -38120 -40079 -12188 -34612 -17302 28074
Трёхзначные числа: -791 -319
Номера четырёхзначных чисел: 8 9 12 15 16