Bài tập về dãy con: - Bài Tập Pascal Tổng Hợp

Bài tập về dãy con:

Bài 1: Viết chương trình nhập số nguyên K ( K > 1), và N số nguyên (N >= 1). Đưa ra màn hình độ dài đoạn lớn nhất các phần tử liên tiếp nhau cùng chia hết cho K.
Chương trình:
uses crt;
var a,b,c:array[0..1000] of longint;
i,j,n,k,max:longint;
function kiemtra(n,k:longint):boolean;
var kt:boolean;
begin
kt:=true;
if n mod k <> 0 then kt:=false;
kiemtra:=kt;
end;
{---------------------------------------}
begin
clrscr;
write('nhap so n: ');readln(n);
write('nhap so k: ');readln(k);
for i:=1 to n do
begin
write('A[',i,']= ');
readln(a[i]);
b[i]:=0;
end;
max:=1;b[0]:=0;
for j:=1 to n do
begin
if kiemtra(a[j],k) then b[j]:=b[j-1]+1 else b[j]:=0;
if b[j] > b[max] then max:=j;
end;
write('doan lon nhat chia het cho k co ',b[max],' phan tu.');
readln
end.

Bài 2. Nhập một dãy số nguyên và lưu trong một mảng. Không dùng mảng trung gian, hãy in ra dãy con tăng nghiêm ngặt có tổng giá trị các phần tử lơn nhất.
VD: 1 3 2 8 10 12 7 29 6 6 3
output: 7 29
chuong trinh
Var f,A: array[1..100] of integer;
N,i,max:integer;
Begin
write('Nhap vao N:'); Readln(N);
For i:=1 to n do
Begin
write('A[',i,']=');
readln(A[i]);
End;
For i:=1 to n do f[i]:=1;
max:=1;
for i:=2 to n do
if a[i]>a[i-1] then
Begin
f[i]:=f[i-1]+1;
if f[i]>f[max] then max:=i;
end;
Writeln('Day con bat dau tu: ',max-f[max]+1,'co ',f[max], ' phan tu');
Readln
End.
Bài 3. Dãy con Fibonacci
Cho một dãy các số nguyên a1, a2, ..., an (n <= 100). Hãy tìm trong dãy a một dãy fibonacci dài nhất
- Dãy fibonacci là dãy có tính chất sau:
F0 = F1 = 1
Fn = Fn-1 + Fn-2
Dữ liệu vào: bai2.inp
  • Dòng đầu chứa số n ( n <= 100)
  • Dòng 2 chứa n số nguyên (ai <= 100000)
Dữ liệu ra: bai2.out
- Chứa duy nhất một dòng là dãy Fibonacci tìm được

var
a: array[1..100] of integer;
i,n,dem,max,k: integer;
f1, f2: text;

begin
assign(f1,’fibo.inp’); reset(f1);
assign(f2,’fibo.out’); rewrite(f2);

readln(f1,n);
for i := 1 to n do read(f1,a[i]);
i:= 1; max:= 0; k := 0;
while i < n do
begin

IF ( a[i] = 1) and (a[i + 1] = 1) then
begin
dem := 2;

while (a[i+2] = a[i] + a[i+1]) and (i <= n-2) do
begin
dem := dem + 1;
i := i + 1;
end;
end;
if dem > max then
begin max := dem ; k := i+ 1;
end;
i := i + 1;
end;
for i:= k – dem + 1 to k do write(f2,a[i],’ ‘);
close(f1); close(f2);

end.
Previous
Next Post »

2 nhận xét

Write nhận xét
Hưng
AUTHOR
lúc 00:55 23 tháng 6, 2017 delete

AD cho mình hỏi ở bài 2 mình chạy chương trình ở trên sau lại ra kết quả là: 2, 8, 10, 12
khác với kết quả output của AD cho vậy?( Mong AD giải thích, cho mình cảm ơn).

Reply
avatar