Biểu diễn N thành tổng các số Fibonaci
3 posters
Trang 1 trong tổng số 1 trang
Biểu diễn N thành tổng các số Fibonaci
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... )
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... )
Được sửa bởi Admin ngày Mon Mar 16, 2015 8:53 pm; sửa lần 2.
Re: Biểu diễn N thành tổng các số Fibonaci
- 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- 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
Re: Biểu diễn N thành tổng các số Fibonaci
- 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- 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
Re: Biểu diễn N thành tổng các số Fibonaci
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é.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.
Similar topics
» mai thị diệu thủy
» Tổng các số trong tệp
» Dãy con có tổng lớn nhất - nâng cao hơn so với các bài dãy con khác
» Tổng hợp chuơng trình trong Kiểm tra giữa kì- Lợi
» Kính gửi 9 thanh niên
» Tổng các số trong tệp
» Dãy con có tổng lớn nhất - nâng cao hơn so với các bài dãy con khác
» Tổng hợp chuơng trình trong Kiểm tra giữa kì- Lợi
» Kính gửi 9 thanh niên
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|