Tin học Tây Sơn
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Biểu diễn N thành tổng các số Fibonaci

3 posters

Go down

Biểu diễn N thành tổng các số Fibonaci Empty Biểu diễn N thành tổng các số Fibonaci

Bài gửi by Admin Tue Mar 10, 2015 3:17 pm

Cho số tự nhiên N và dãy số Fibonaci: 1, 1, 2, 3, 5, 8, ....
Bạn hãy viết chương trình kiểm tra xem N có thể biểu diễn thành tổng của của các số Fibonaci khác nhau hay không?
Fabonaci.INP
16
Fabonaci.OUT
13 3


Ý tưởng: Ta sẽ tìm số Fibonacci gần với số N nhất. Đây sẽ chính là số hạng đầu tiên nằm trong dãy kết quả. Sau đó, lấy hiệu của số N và số Fibonacci gần với số N nhất, tiếp tục tìm số Fib gần với hiệu trên và cứ thế cho đến khi hiệu đó là một số Fib. Kết quả các số Fibonacci sẽ được liệt kê theo thứ tự từ lớn đến nhỏ.
Ai có thể coding bài này nhanh gửi lên để cả lớp học tập nào.
Lưu ý: Bài này không giống như bài Phân tích N thành tổng các số Fabonaci liên tiếp (Hướng giải là lưu tất cả các số Fabonaci và mảng, công việc tiếp theo giống như tìm dãy con trong mảng đó có tổng bằng N - Bài này trở thành bài nhỏ của bài chia đoạn thành những phần có tổng bằng nhau, với N ở đây cho sẵn, không phải tìm như bài chia đoạn... Idea Idea )


Được sửa bởi Admin ngày Mon Mar 16, 2015 8:53 pm; sửa lần 2.
Admin
Admin
Giáo viên
Giáo viên

Tổng số bài gửi : 192
Điểm thành tích : 17384
Reputation : -6
Join date : 29/12/2014

https://tinhoctayson.forumvi.com

Về Đầu Trang Go down

Biểu diễn N thành tổng các số Fibonaci Empty Re: Biểu diễn N thành tổng các số Fibonaci

Bài gửi by Thành Lợi Tue Mar 10, 2015 6:36 pm

Code:
Uses crt;
Var Fi, Fo: text;
   n: integer;
Procedure Laydulieu;
Begin
   Assign(Fi, 'D:\Fibonacy.INP');
   Reset(Fi);
   read(Fi, n);
   Close(Fi);
end;
Procedure Xuli;
Var Fibonacy, vitri: array[1..100] of integer;
   t, i, d, j: integer;
   ok: boolean;
Begin
   Assign(Fo, 'D:\Fibobacy.out');
   Rewrite(Fo);
   Fibonacy[1]:= 1;
   Fibonacy[2]:= 1;
   t:= 1;
   d:= 2;
   ok:= true;
   While t < n do
      begin
         inc(d);
         Fibonacy[d]:= Fibonacy[d-1]+ Fibonacy[d-2];
         t:= Fibonacy[d];
      end;
   t:= n;
   j:= 0;
   For i:= d downto 1 do
      begin
         If Fibonacy[i] <= t then
            begin
               inc(j);
               Vitri[j]:= i;
               t:= t - Fibonacy[i];
            end;
      end;
      If t <> 0 then ok:= false;
      If Ok = true then
            for i:= 1 to j do
                                begin
                                If i <> j then
                                write(Fo, Fibonacy[vitri[i]], ' + ') else
                                write(Fo, Fibonacy[vitri[i]])
                                end
                                else write(Fo, 'Khong the bieu dien ');
      Close(Fo);
end;
Begin
   Laydulieu;
   Xuli;
end.
Thành Lợi
Thành Lợi
Chăm chỉ
Chăm chỉ

Tổng số bài gửi : 108
Điểm thành tích : 17179
Reputation : -35
Join date : 03/01/2015
Age : 23
Đến từ : Việt Nam

Về Đầu Trang Go down

Biểu diễn N thành tổng các số Fibonaci Empty Re: Biểu diễn N thành tổng các số Fibonaci

Bài gửi by lyhuynh3112 Fri Mar 13, 2015 7:09 am

Code:
program fibonacy;
uses crt;
var fi,fo:text;
    n,x,y,z:word;
procedure doc;
begin
    readln(fi,n);
end;
procedure xuli;
begin
    repeat
    x:=1; y:=0;
          repeat
          z:=x+y;
          x:=y;
          y:=z;
          until (z>n);
    write(fo,x,' ');
    n:=n-x;
    until n=0;
end;
begin
    clrscr;
    assign(fi,'d:\ly\lyly\kt.inp');
    reset(fi);
    assign(fo,'d:\ly\lyly\kt.out');
    rewrite(fo);
    doc;
    xuli;
    readln;
end.
lyhuynh3112
lyhuynh3112
Bắt đầu học nâng cao
Bắt đầu học nâng cao

Tổng số bài gửi : 37
Điểm thành tích : 17125
Reputation : 0
Join date : 03/01/2015
Age : 23
Đến từ : dong pho

Về Đầu Trang Go down

Biểu diễn N thành tổng các số Fibonaci Empty Re: Biểu diễn N thành tổng các số Fibonaci

Bài gửi by Admin Mon Mar 16, 2015 9:14 pm

lyhuynh3112 đã viết:
Code:
program fibonacy;
uses crt;
var fi,fo:text;
    n,x,y,z:word;
procedure doc;
begin
     readln(fi,n);
end;
procedure xuli;
begin
     repeat
     x:=1; y:=0;
           repeat
           z:=x+y;
           x:=y;
           y:=z;
           until (z>n);
     write(fo,x,' ');
     n:=n-x;
     until n=0;
end;
begin
     clrscr;
     assign(fi,'d:\ly\lyly\kt.inp');
     reset(fi);
     assign(fo,'d:\ly\lyly\kt.out');
     rewrite(fo);
     doc;
     xuli;
     readln;
end.
Bài này để mục lưu ý mấy ngày rồi mà chẳng có ai ý kiến về đoạn code này của Ly là sao? Thầy đã lưu ý là phải đọc kỹ đề trước khi làm rồi . Code của Ly là để giải quyết bài phân tích một số thành tổng các số fibonacy liên tiếp, còn bài này thì khác: Bài này là phân tích N thành tổng các số fibonacy khác nhau. Chú ý nhé: Bài này các em tham khảo Ý tưởng của Thầy kết hợp code của Lợi. Có chỗ nào chưa hiểu thì nêu ra nhé.
Admin
Admin
Giáo viên
Giáo viên

Tổng số bài gửi : 192
Điểm thành tích : 17384
Reputation : -6
Join date : 29/12/2014

https://tinhoctayson.forumvi.com

Về Đầu Trang Go down

Biểu diễn N thành tổng các số Fibonaci Empty Re: Biểu diễn N thành tổng các số Fibonaci

Bài gửi by Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết