#include <iostream>
using namespace std;
int p = 0;
int f(int p)
{
if (p <= 0)
return 0;
if (p == 1)
return 1;
return f(p - 2) + f(p - 1);
}
int main()
{
int a;
cin >> a;
int mas[a];
for (; f(p) <= a; p++)
mas[p] = f(p);
for (int p = ::p - 1; p >= 0; p--)
{
int prob = a - mas[p];
for (int q = 0; q < p; q++)
if (prob == mas[q])
{
cout << "\n"
<< mas[p] << " " << prob;
exit(0);
};
};
cout << "condition impossible";
}
единственный минус программы - наибольшее число фибоначчи для нее приоритетнее : при вводе 8 , она выведет 8 0 , но так как и 8, и 0 являются числами фиб. , то условие выполняется верно .
программа выводит "condition impossible" ,когда введеное число нельзя представить в виде суммы двух чисел фиб.
N = 13;
Type
Mass = array[1..N] of real;
Var
f:file of real;
A:Mass;
Max:integer;
Procedure CF(f:file of real);
Begin
Assign(f,'File.real');
Rewrite(f);
For var i:= 1 to N do
Write(f,N*(random-random))
End;
Procedure RF(f:file of real; Var A:Mass; Var Max:integer);
Var
i:integer;
Begin
Reset(f);
Write('Исходный массив:');
Max:=1;
For i:= 1 to N do
Begin
Read(f,A[i]);
Write(' ',A[i]:0:3);
if A[i] > A[Max] then Max:=i;
End;
WriteLn;
End;
Begin
CF(f);
RF(f,A,Max);
WriteLn('Max = A[',Max,'] = ',A[Max]:0:3);
End.
Пример работы программы:
Исходный массив: 8.731 1.629 1.482 9.547 3.067 -3.207 9.701 -2.065 -0.447 -0.980 -4.818 -0.603 -2.742
Max = A[7] = 9.701