Tin học Viết thuật toán

B

beconngusay

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

C1: Dãy số 1 1 2 3 5 8 13 21 gọi là dãy Fibonaccin. Viết thuật toán nhập vào số n, kiểm tra xem n có phải là số trong dãy Fibonacci?

C2: Lập trình để xác định giá trị nhỏ nhất của n để có tổng từ 1 đến n lớn hơn 1000
 
L

lamdetien36

Bài 1 có 2 cách, bài 2 cũng có 2 cách :D
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 :D Chỉ chết bạn thôi :D


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 :D
$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 :D

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.
 
A

atlmnt

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.
 
Top Bottom