10.05.2017

Tách số

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