Trang chủ Tin Học Lớp 9 Dãy số Fibonacci và những chú thỏ Tên chương trình: Fibo.??? Dãy số Fibonacci bắt nguồn từ bài toán cổ...
Câu hỏi :

Dãy số Fibonacci và những chú thỏ Tên chương trình: Fibo.??? Dãy số Fibonacci bắt nguồn từ bài toán cổ về việc sinh sản của các cặp thỏ. Bài toán đặt ra như sau: 1. Các con thỏ không bao giờ chết; 2. Hai tháng sau khi ra đời, mỗi cặp thỏ mới sẽ sinh ra một cặp thỏ con (một đực, một cái); 3. Khi đã sinh con rồi thì cứ mỗi tháng tiếp theo chúng lại sinh được một cặp con mới Giả sử từ đầu tháng 1 có một cặp mới ra đời thì đến giữa tháng thứ n sẽ có bao nhiêu cặp? Ví dụ, n = 5, ta thấy: Giữa tháng thứ 1: 1 cặp (ab) (cặp ban đầu) Giữa tháng thứ 2: 1 cặp (ab) (cặp ban đầu vẫn chưa đẻ) Giữa tháng thứ 3: 2 cặp (AB)(cd) (cặp ban đầu đẻ ra thêm 1 cặp con) Giữa tháng thứ 4: 3 cặp (AB)(cd)(ef) (cặp ban đầu tiếp tục đẻ) Giữa tháng thứ 5: 5 cặp (AB)(CD)(ef)(gh)(ik) (cả cặp (AB) và (CD) cùng đẻ) Bây giờ, ta xét tới việc tính số cặp thỏ ở tháng thứ n? Ta dễ dàng thấy được dãy số: 1, 1, 2, 3, 5, . . . , dãy này còn gọi là dãy Fibonacci. Viết chương trình tính số hạng thứ N của dãy Fibonacci? Dữ liệu vào: File Fibo.inp gồm một số tự hiên duy nhất N (0 < N < 1000) Dữ liệu ra: File Fibo.out gồm duy nhất một số fibo thứ N Ví dụ: Fibo.inp Fibo.out 5 5 viết bằng pascal

Lời giải 1 :

program Fibonacci;

var
  N: integer;
  fibo: int64;
  a, b, temp: int64;

begin
  // Đọc dữ liệu từ tệp Fibo.inp
  assign(input, 'Fibo.inp');
  reset(input);
  read(N);
  close(input);

  // Khởi tạo các giá trị ban đầu
  a := 0;
  b := 1;

  // Tính số Fibonacci thứ N
  if N = 0 then
    fibo := a
  else if N = 1 then
    fibo := b
  else
  begin
    for N := 2 to N do
    begin
      temp := a + b;
      a := b;
      b := temp;
    end;
    fibo := b;
  end;

  // Ghi kết quả vào tệp Fibo.out
  assign(output, 'Fibo.out');
  rewrite(output);
  write(fibo);
  close(output);
end.

Lời giải 2 :

uses crt;
function add(a,b: string): string;
var m, carry, i, temp: integer;
    res: string;
begin
    if length(a) > length(b) then m := length(a) else m := length(b);
    while (length(a) < m) do a := '0' + a;
    while (length(b) < m) do b := '0' + b;
    carry := 0;
    res := '';
    for i := m downto 1 do
    begin
        temp := (ord(a[i]) - 48) + (ord(b[i]) - 48) + carry;
        if temp <= 9 then begin
            res := char(temp + 48) + res;
            carry := 0;
        end else begin
            res := char((temp mod 10) + 48) + res;
            carry := 1;
        end;
    end;
    if carry = 1 then res := char(49) + res;
    exit(res);
end;
var n, i: integer;
    f1, f2, temp: string;
begin
    assign(input, 'Fibo.inp'); reset(input);
    assign(output, 'Fibo.out'); rewrite(output);
    readln(n);
    if (n = 1) or (n = 2) then write(1)
    else begin
        f1 := '1';
        f2 := '1';
        for i := 3 to n do
        begin
            temp := f2;
            f2 := add(f1, f2);
            f1 := temp;
        end;
        writeln(f2);
    end;
end.

Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, chúng ta sắp phải bước vào một kỳ thi căng thẳng và sắp chia tay bạn bè, thầy cô. Áp lực từ kỳ vọng của phụ huynh và tương lai lên cấp 3 thật là lớn, nhưng hãy tin vào bản thân và giữ vững sự tự tin!

Nguồn :

sưu tập

Copyright © 2024 Giai BT SGK