Mô tả:
đề thi học sinh giỏi môn tin học
ĐỀ THI TIN HỌC
Bài 1: Tên file được đặt là BL1.PAS (2,5 điểm)
Tại vương quốc Ba Tư xa xưa, người ta tổ chức các cuộc thi tìm dãy số hạnh phúc :
các chàng trai cô gái thông minh trong thời gian ngắn nhất phải tìm ra được một dãy
số hạnh phúc có nhiều phần tử nhất.
Dãy số tự nhiên a1, a2,.., ak được gọi là hạnh phúc nếu nó thoả mãn các điều kện sau :
- Dãy trên là dãy giảm dần .
- Với mọi i (1=4 ), mỗi điểm
được đánh dấu bằng một trong bốn màu: xanh, đỏ, tím, vàng. Mỗi màu được sử dụng ít
nhất một lần trong quá trình đánh dấu .
Lập chương trình thực hiện các công việc sau :
a) Nhập thông tin về vị trí các điểm màu dùng để đánh dấu các điểm tương ứng đó từ
bàn phím (xanh : X , đỏ : D , tím : T , vàng : V ).
b) Chỉ ra một đoạn thẳng dài nhất trong đó thoả mãn: Có đúng hai màu, mỗi màu xuất
hiện đúng một lần và hai màu còn lại, mỗi màu xuất hiện ít nhất một lần (nếu có nhiều
đoạn thoả mãn thì đọc ra tất cả các đoạn thẳng đó mỗi đoạn trên một dòng)
Ví dụ :
Nhập
Dãy A
Đọc ra màn hình
N
10
TV V D T V D X T V
DOAN THOA MAN DAI NHAT
LA:
VVDTVDX
ĐÁP ÁN
Bµi1:
{Day so hanh phuc}
uses crt;
var a: array[1..1000]of integer;
i,j,k,n,d:integer;
kt:boolean;
function nt(n:longint):boolean;
var i:longint;
begin
if n<2 then nt:=false
else begin
i:=2;
while (i<=sqrt(n)) and (n mod i<>0) do inc(i);
nt:=(i>sqrt(n));
end;
end;
BEGIN
clrscr;
write('vao n=');readln(n);
if n=2 then write(n,'
',1)
else
begin
d:=1; a[1]:=n;
for i:= n-1 downto 1 do
begin
if(nt(i)) then
begin inc(d);a[d]:=i;a[d]:=i;end
else
begin
kt:=false;
for j:=1 to d-1 do
if a[j] mod i=0 then kt:=true;
if kt
then begin
inc(d);
a[d]:=i;
end;
end;
end;
for i:=1 to d do write(a[i],'
');
end;
readln;
END.
Bài 2:
uses crt;
var a:array[1..1000]of longint;
k,i,n,m,h:longint;
function fbnx(k:longint):boolean;
var i:longint;
f:array[1..100]of longint;
begin
f[1]:=1;
f[2]:=1;
i:=3;
repeat
f[i]:=f[i-1]+f[i-2];
inc(i);
until f[i-1]>=k;
fbnx:=(f[i-1]=k);
end;
BEGIN
clrscr;
write('Nhap n=');readln(n);
if (n=0) or(n=1) then begin write('KHONG THE PHAN
TICH.');readln;exit;end;
if (n=2) then begin write('KHONG THE PHAN
TICH.');readln;exit;end;
m:=n;
k:=0;
if not fbnx(n) then
begin
repeat
for i:=n downto 1 do
if fbnx(i) then begin inc(k);a[k]:=i;n:=ni;break;end;
until (n=0)or (n=1);
write('',m,'=');
if n=0 then
begin
for i:=1 to k-1 do write('',a[i],'+');
write(a[k]);
end;
if n=1 then
begin
for i:=1 to k-1 do write('',a[i],'+');
write('',a[k],'+1');
end;
end
else
begin
write('',n,'=');
h:=0;
for i:=n-1 downto 1 do
if fbnx(i) then begin
h:=i;write('',i,'+');break;end;
write(n-h);
end;
readln
end.
Bài 4:
USES CRT;
var n,k,i,j,c,d1,h,max:integer;
d,dau,cuoi:array[1..255] of integer;
MAU: string;
BEGIN
CLRSCR;
write('VAO DAY MAU LA CAC KI TU IN HOA: ');readln(MAU);
WRITELN(************************);
i:=1;
repeat
j:=4;
repeat
for k:=1 to 4 do
d[k]:=0;
for k:=i to j do
begin
if (MAU[k]='X') then inc(d[1]);
if (MAU[k]='D') then inc(d[2]);
if (MAU[k]='T') then inc(d[3]);
if (MAU[k]='V') then inc(d[4]);
end;
if((d[1]=1)and(d[2]=1)and(d[4]<>0)and(d[3]<>0))
or
((d[1]=1)and(d[3]=1)and(d[2]<>0)and(d[4]<>0))
or
((d[1]=1)and(d[4]=1)and(d[2]<>0)and(d[3]<>0))
or((d[3]=1)and(d[2]=1)and(d[1]<>0)and(d[4]<>0))
or((d[4]=1)and(d[2]=1)and(d[1]<>0)and(d[3]<>0))
or((d[3]=1)and(d[4]=1)and(d[2]<>0)and(d[1]<>0))
then
begin
inc(h);
if j-i+1 >max then max:=j-i+1;
dau[h]:=i;cuoi[h]:=j;
end;
inc(j);
until j>length(MAU);
inc(i);
until i>length(MAU);
if h>0 then
begin
write(' DOAN MAU THOA MAN LA :');
for i:=dau[1] to cuoi[1] do write(MAU[i]);writeln;
for i:=1 to h do
begin
if cuoi[i]-dau[i]+1=max then
begin
write(' DOAN MAU DAI NHAT THOA MAN
LA :');
for j:=dau[i] to cuoi[i] do
write(MAU[j]);writeln;
end;
end;
end
else writeln('KHONG CO DOAN MAU NAO THOA MAN');
readln
………………………………………………………………………………….
- Xem thêm -