Cho số tự nhiên N và dãy số Fibonaci 1, 1, 2 , 3, 5, 8,...
Hãy viết chương trình kiểm tra xem N có thể phân tích được thành tổng của các số Fibonaci khác nhau hay không (tổng có ít nhất 2 số hạng ) thông báo ra màn hình cách biểu diễn đó, nếu không có cũng thông báo: KHONG THE PHAN TICH.
Ví dụ:
Nhập N Đọc ra màn hình
20 20=13+5+2
Lời giải tham khảo
uses crt;
var a:array[1..1000]of longint;
k,i,n,m,h:longint;
function fbnx(k:longint):boolean;
var i:longint;
f:array[1..100]of longint;
begin
f[1]:=1;
f[2]:=1;
i:=3;
repeat
f[i]:=f[i-1]+f[i-2];
inc(i);
until f[i-1]>=k;
fbnx:=(f[i-1]=k);
end;
BEGIN
clrscr;
write('Nhap n=');readln(n);
if (n=0) or(n=1) then begin write('KHONG THE PHAN TICH.');readln;exit;end;
if (n=2) then begin write('KHONG THE PHAN TICH.');readln;exit;end;
m:=n;
k:=0;
if not fbnx(n) then
begin
repeat
for i:=n downto 1 do
if fbnx(i) then begin inc(k);a[k]:=i;n:=n-i;break;end;
until (n=0)or (n=1);
write('',m,'=');
if n=0 then
begin
for i:=1 to k-1 do write('',a[i],'+');
write(a[k]);
end;
if n=1 then
begin
for i:=1 to k-1 do write('',a[i],'+');
write('',a[k],'+1');
end;
end
else
begin
write('',n,'=');
h:=0;
for i:=n-1 downto 1 do
if fbnx(i) then begin h:=i;write('',i,'+');break;end;
write(n-h);
end;
readln
end.
No comments:
Post a Comment
Cảm ơn bạn đã nhận xét