3/(tin học trẻ TP Đà Nẵng năm 2010-THCS) Cho biết rằng với mọi số nguyên dương lớn hơn 2 đều có thể viết được thành tổng hữu hạn các số fibonacci khác nhau. Hãy tìm cách phân tích một số nguyên dương N (N>2) thành tổng các số fibonnaci khác nhau sao cho số số hạng là nhiều nhất.
program bt; var s:string; nho,f:array[0..1000]of longint; v:array[1..1000]of boolean; n,t:longint;k,i,j,d:integer; function fb(x:integer;i:integer):integer; begin for j:=1 to i do if x=f[j] then begin fb:=j; break; end else fb:=0; end; begin writeln('nhap n'); readln(n); fillchar(v,sizeof(v),false); s:='';f[0]:=1;f[1]:=1;i:=0;t:=0;d:=0; while t<n do begin inc(i); f[i]:=f[i-1]+f[i-2];k:=1; while (n-t<f[i]) and (k<i) do begin d:=fb(t+f[i]-n,i); if d>0 then begin t:=t-f[d];v[d]:=false; end else begin t:=t-f[i-k];v[i-k]:=false; inc(k); end;end; if (n-t>=f[i])and(v[i]=false) then begin t:=t+f[i];v[i]:=true; end; end; for j:=1 to i do if v[j]=true then s:=chr(f[j]+48)+' + '+s; delete(s,length(s),1); writeln('so phan tich: ',s); readln; end.