Kiểm tra số fibonacci pascal

lamdetien36

  • #2

Bài 1 có 2 cách, bài 2 cũng có 2 cách
Bài 1:
Input: Số nguyên dương N.
Output: N có phải số Fibonacci không ?


Cách 1: Khá là bựa )
"N là 1 số thuộc day Fibonacci khi và chỉ khi 5N^2 + 4 hoặc 5N^2 - 4 là số chính phương"
Như vậy thuật toán như sau:
B1. Nếu 5N^2 + 4 hoăc 5N^2 - 4 là số chính phuơng thì thông báo N là số Fibonacci, ngược lại thông báo N không phải số Fibonacci
B2. Kết thúc thuật toán.
Khuyên chân thành là đừng có nộp thuật toán này Chỉ chết bạn thôi


Cách 2: Cách bình thường:
B1. f1 <-- 1, f2 <-- 1.
B2. f <-- f1 + f2.
B3. Nếu N = f thì thông báo N là số Fibonacci rồi kết thúc thuật toán.
B4. Nếu f > N thì thông báo N không phải số Fibonacci rồi kết thúc thuật toán.
B5. f1 <- f2. f2 <- f.
B6. Quay lại bước 2.

Bài 2:


Cách 1: Cách bựa
$1 + 2 + 3 + ... + N > 1000$
$<=>N(N + 1) / 2 > 1000$
$<=>N^2 + N > 2000$
Giải phương trình $N^2 + N = 2000$, ta tìm ra nghiêm là 44,.... Như vậy để $N^2 + N > 2000$ thì N phải bằng 45.
Vậy thuật toán là:
B1. Thông báo số 45 =))
B2. Kết thúc thuật toán.

Đừng dùng

Cách 2: Cách bình thường.
B1. N <-- 0. S <-- 0.
B2. Nếu S > 1000 thì thông báo N rồi kết thúc thuật toán.
B3. N <-- N + 1. S <-- S + N.
B4. Quay lại bước 2.

atlmnt

  • #3

Bài 1:

Mã:

var n,x1,x2,x:longint;
begin
  write('n='); readln(n);
  x1:=1;
  x2:=1;
  x:=1;
  while x<=n do
    begin
      if x=n then break
       else begin
               x1:=x2;
               x2:=x;
               x:=x1+x2;
               end;
     end;
  if x=n then write('N la so Fibonacci')
   else write('N khong la so Fibonacci');
  readln;
  end.

thienvamai

  • #4

Bài 1:

Mã:

var n,x1,x2,x:longint;
begin
  write('n='); readln(n);
  x1:=1;
  x2:=1;
  x:=1;
  while x<=n do
    begin
      if x=n then break
       else begin
               x1:=x2;
               x2:=x;
               x:=x1+x2;
               end;
     end;
  if x=n then write('N la so Fibonacci')
   else write('N khong la so Fibonacci');
  readln;
  end.

thế để while x

Bài 1(Cách 1): Viết chương trình nhập từ bàn phím một số n. Xuất dãy số Fibonacci trong khoảng n.

Biết dãy số Fibo được xác dịnh như sau :

U0 = U1 = 1

Un+2 = Un+1 + Un (n > 0)

Ví dụ: n = 8 -> 1 1 2 3 5 8 13 21.

Program Day_Fibo;

uses crt;

var i,n,f1,f2,f3:longint;

procedure fibo(k:longint);

begin

 f1:=1;

 f2:=1;

 for i:=1 to k do

 begin

  f3:=f1+f2;

  write(f1:3,'  ');

  f1:=f2;

  f2:=f3;

 end;

end;

begin

 clrscr;

 write('Nhap n: ');readln(n);

 fibo(n);

 readln;

end.

Bài 1 (Cách 2): Nhập vào một số N. Xuất ra tất cả các số fibonanci trong khoảng N.

VD: N = 5    -> 1        1          2          3          5

Program Bai9;

uses crt;

var a,b,c,d,i,n:integer;

begin

clrscr;

  write('Nhap vao n = ');readln(n);

  a:=1;

  b:=1;

  c:=a+b;

  write(n,' so Fibonaci dau tien la: ');

  write(1:4,1:4);

  for i:=3 to n do

    begin

      write(c:4);

      a:=b;

      b:=c;

      c:=a+b;

    end;

  writeln;

  writeln('Da xu ly xong');

readln;

end.

  writeln('da xu ly xong');

 readln;

end.

Bài 2: Nhập vào một số N. Xuất ra số Fibonanci thứ N

VD: N = 10    -> Số Fibonanci thứ 10 là: 55

program xuat_so_fibonanci;

uses crt;

var i,n,s,a,b:integer;

begin

clrscr;

 write('nhap vao n:=');readln(n);

  b:=1;

  i:=2;

  a:=1;

   while (i

    begin

     i:=i+1;

      if i mod 2=1 then a:=a+b

      else b:=b+a;

    end;

     if i mod 2=1 then write('So Fibonanci thu ',n,' la: ',a)

     else writeln('So Fibonanci thu ',n,' la: ',b);

readln;

end.

Bài 3: Nhập vào một số phân tích thành tổng các số là số fibonanci.

VD: N = 10   -> 10 = 8 +2

program tfbnc;

var i,j,n:integer;

    f:array[1..1000] of longint;

function fib(k:integer):longint;

  begin

    f[1]:=1;

    f[2]:=1;

    f[3]:=2;

    if f[k]=-1 then f[k]:=fib(k-1)+fib(k-2);

    fib:=f[k];

  end;

begin

  write('nhap n: ');readln(n);

  write(n,'=');

  for i:=1 to 1000 do f[i]:=-1;

  while n>0 do

  begin

    i:=1;

    while fib(i)<=n do i:=i+1;

    j:=fib(i-1);

    if i<=n then write(j,' + ')

    else write (j);

    n:=n-j;

  end;

  writeln();

  writeln('da xu ly xong');

 readln;

end.

Bài 4: Nhập vào một số N. kiểm tra xem có mấy cách phân tích thành tổng các số fibonanci.

VD: N = 10   -> Có 3 cách phân tích.

program bai10;

var f:array[1..20] of integer;

    dd:array[1..20] of boolean;

    n,i,luu:integer;

procedure tim(i:integer);

var j:integer;

begin

  if n=0 then

  begin

    writeln(i-1);

    readln;

    halt;

  end

  else

  begin

    for j:=1 to luu do

     if (not dd[j]) and (n>=f[j]) then

     begin

       dd[j]:=true;

       n:=n-f[j];

       tim(i+1);

       dd[j]:=false;

       n:=n+f[j];

     end;

  end;

end;

{Chuong trinh chinh}

begin

  write('nhap vao n: ');readln(n);

  f[1]:=1;

  f[2]:=1;

  i:=2;

  while (f[i]

    begin

      i:=i+1;

      f[i]:=f[i-1]+f[i-2];

    end;

  luu:=i;

  tim(0);

end.