Professional Documents
Culture Documents
Biên soạn: LÊ QUANG VINH Gv trường THPT chuyên Lương Thế Vinh.
Chuyên đề này cung cấp 30 bài tập về cấu trúc, kiểu dữ liệu lập trình cơ bản nhằm giúp
quý thầy cô và các em học sinh THCS có thêm điều kiện rèn luyện chuẩn bị cho kì thi
HSG lớp 9. Các em có thể tham khảo thêm bài tập ở sách “Bồi dưỡng năng khiếu tin
học thuộc chương trình 3”, quyển 1, 2. Rất mong nhận được góp ý từ quý thầy cô và các
em học sinh. Mọi góp ý xin gửi đến email lequangvinh1912@gmail.com.
Xin chân thành cảm ơn!
Chương trình
const fi='tinhtong.inp';fo='tinhtong.out';
var n:longint;s:real;
begin
assign(input,fi);reset(input);
assign(output,fo);rewrite(output);
readln(n);
s:=(2+2*n)*n/2;
write('Tong la ',s:0:0);
close(input);close(output);
end.
Test
Input Output Giải thích
5 4
3
1
10 6 8
20 15 13.23
200 150 132.29
1234 987 740.67
65432 23456 61083.24
Chương trình
const fi='canhke.inp';fo='canhke.out';
var a,b:longint;c2,c:real;
begin
assign(input,fi);reset(input);
assign(output,fo);rewrite(output);
readln(a,b);
c2:=a*a-b*b;
c:=sqrt(c2);
writeln('Canh ke con lai la ',c:0:2);
close(input);close(output);
end.
Ví dụ:
Input Output Giải thích
5 Dien tich hinh tron la 39.25
Test
Input Output Giải thích
2
Nhap canh hinh vuong 5 Dien tich hinh tron la: 39.25
10 157
123 23752.53
4321 29313534.37
12345 239266469.25
Chương trình
var c,r2,s:real;
begin
write('nhap canh hinh vuong:');
readln(c);
r2:=c*c/2;
s:=3.14*r2;
writeln(s:0:2);
readln;
end.
3
end.
Chương trình
const
fin='kttg.inp';
fon='kttg.out';
var a,b,c:real;
begin
assign(input,fin);reset(input);
assign(output,fon); rewrite(output);
read(a, b, c);
if (a+b>c) and (a+c>b) and (b+c>a) then
writeln('duoc')
else writeln('khong');
close(input);close(output);
end.
4
phút. Viết chương trình nhập vào số phút truy cập của một người và in ra số tiền phải trả
của người đó.
Ví dụ:
Input Output Giải thích
150 9300 60*80 + 60*50+ 30*30 = 8700
Chương trình
Const Fin='NET1.INP'; Fon='NET1.OUT';
var
n,t,cs:word;
tien:real;
begin
Assign(input,fin);Reset(input);
Assign(output,fon);Rewrite(output);
readln(input,cs);
if cs <=60 then tien:=80*cs
else // cs>60
if n<=120 then tien:=60*80+(cs-60)*50
else tien:=60*80+60*50+(cs-120)*30;
writeln(tien:0:2);
Close(input);Close(output);
End.
5
case t of
1,3,5,7,8,10,12:write(31);
4,6,9,11:write(30);
2:
if (n mod 400=0) or ((n mod 100 <> 0) and (n mod 4 = 0)) then
write(29)
else
write(28);
end;
close(input);close(output);
end.
Năm nhuận là năm có 366 ngày và tháng 2 năm đó có 29 ngày. Ta Input Output
2012 True
có cách xác định năm nhuận như sau: năm nhuận là năm chia hết 2010 false
cho 400 hoặc không tròn trăm nhưng chia hết cho 4. Viết chương 2100 False
trình nhập vào một năm bất kì, cho biết đó có phải năm nhuận 2000 true
không ?
6
end.
Bảng của đồng hồ điện tử gồm một dãy ba số h, p và s thể hiện tương ứng giờ, phút và
giây của thời điểm hiện tại. Cứ sau mỗi giây giá trị của bộ ba số h, p và s này sẽ thay đổi
thành 3 số h1, p1 và s1 tương ứng với thời điểm mới
Input Output
Yêu cầu: Cho ba số h, p và s, hãy tìm 3 số h1, p1 và s1.
8 30 0 8 30 1
Dữ liệu: gồm 1 dòng chứa ba số nguyên không âm h, p và s (0 ≤ h
≤ 23, 0 ≤ p, s ≤ 59).
Kết quả: 3 số nguyên h1, p1 và s1 tìm được.
Chương trình
const fi='clock.inp';fo='clock.out';
var
h,p,s:longint;
begin
assign(input,fi);reset(input);
assign(output,fo);rewrite(output);
readln(h,p,s);
inc(s);
if s=60 then
begin s:=0;inc(p);end;
if p=60 then
begin p:=0;inc(h);end;
if h=24 then
begin h:=1; end;
writeln(h,' ',p,' ',s);
close(input);close(output);
end.
7
Bài 10. Tiền taxi TAXI
Chương trình
Const
Fin='taxi.INP';
Fon='taxi.OUT';
var
n,tien:real;
begin
Assign(input,fin);Reset(input);
Assign(output,fon);Rewrite(output);
readln(input,n);
if n <=1 then tien:=5000
else
if n<=5 then tien:=5000+(n-1)*4500
else
begin
tien:=5000+4*4500+(n-5)*3500;
if n>120 then tien:=tien*0.9;
end;
writeln(tien:0:2);
Close(input);Close(output);
8
End.
Chương trình
program so_dao_nguoc;
const
fin = 'sodao.inp';
fon = 'sodao.out';
var
x,y,cs: longint;
fi,fo:text;
begin
assign(fi,fin);reset(fi);
assign(fo,fon);rewrite(fo);
read(fi,x);
y:=0;
while x>0 do
begin
cs:=x mod 10;
x:=x div 10;
y:=y*10+cs;
end;
writeln(fo,y mod 19);
close(fi);close(fo);
end.
Chương trình
const finp='soam.inp'; fout='soam.out';
var n, kq, i, x: longint;
co: boolean;
begin
assign(input,finp); reset(input);
assign(output,fout); rewrite(output);
co:=false;
readln(n);
kq:=-maxlongint;
for i:=1 to n do
begin
readln(x);
if (x<0) then
begin
co:=true;
if (x>kq) then kq:=x;
end;
end;
if co then writeln(kq) else writeln(0);
end.
Chương trình
program LT3;
const
fin = 'LT3.INP';
fon = 'LT3.OUT';
var
n,i: longint;
fi,fo:text;
dem:longint;
begin
assign(fi,fin);reset(fi);
assign(fo,fon);rewrite(fo);
read(fi,n);
i:=1;
while i<n do i:=i*3;
if n=i then writeln(fo,1)
else writeln(fo,0);
close(fi);close(fo);
end.
11
var
c,a:array[1..max] of longint;
n,s,i:longint;
d:qword;
procedure solve;
begin
readln(n,s);
Fillchar(c, sizeof(c), 0);
for i:=1 to n do
begin
read(a[i]);
inc(c[a[i]]);
end;
d:=0;
For i:=1 to n do
begin
if S-a[i]>0 then inc(d,c[s-a[i]]);
if s=2*a[i] then dec(d);
end;
writeln(d div 2);
end;
begin
assign(input,fin);reset(input);
assign(output,fon);rewrite(output);
solve;
end.
12
Dòng sau gồm n số nguyên a1, a2, ..., an. (|ai| Input Output
6 12
<1000)
-18 -3 -1 8-7 0
Dòng tiếp theo là số nguyên dương m (0 < m
2
< 106)
2 5
M dòng tiếp theo, mỗi dòng ghi 2 số x, y (1 ≤
4 6
x ≤ y ≤ n)
Output: Xuất m dòng, dòng thứ i là kết quả của truy vấn thứ i.
Chương trình
const fi='doanlt.inp';fo='doanlt.out';
maxn = 10000000;
var n,m,x,y,i:longint;
f:array[0..maxn] of longint;
begin
assign(input,fi);reset(input);
assign(output,fo);rewrite(output);
read(n);
for i:=1 to n do begin
read(x);
f[i]:=f[i-1]+x;
end;
read(m);
for i:=1 to m do begin
readln(x, y);
writeln(f[y]-f[x-1]);
end;
end.
13
Bài 16. Trộn mảng TRONMANG
Cho hai mảng số nguyên dương A và B lần lượt có N và M số. Các phần tử trong cả hai
mảng A và B đều được sắp theo thứ tự tăng dần.
Yêu cầu: hãy tạo mảng C gồm N+M phần tử từ tất cả các phần tử của A và B sao cho các
phần tử của C cũng có thứ tự tăng dần.
Input
Dòng đầu chứa 2 số N, M (0 < N, M <50 000)
N dòng sau, mỗi dòng chứa một số nguyên của mảng A.
M dòng tiếp theo chứa 1 số nguyên dương ứng với các phần tử của mảng B.
Kết quả gồm N+M dòng, lần lượt chứa các phần tử của mảng C.
Input Output
32 1
1 2
2 2
5 4
2 5
4
Chương trình
const fi='tronmang.inp';fo='tronmang.out';
var
n, m, i, j, a, b,d: longint;
ma,mb,mc:array[1..500000] of longint;
begin
assign(input,fi);reset(input);
assign(output,fo);rewrite(output);
readln(n,m);
for i:=1 to n do readln(ma[i]);
for i:=1 to m do readln(mb[i]);
i:=1;a:=ma[1];
j:=1;b:=mb[1];d:=0;
while (i<=n) or (j<=m) do begin
if (a<=b) then
begin
inc(d);mc[d]:=a;
14
inc(i);
if (i<=n) then a:=ma[i]
else a:=maxlongint;
end
else
begin
inc(d);mc[d]:=b;
inc(j);
if (j<=m) then b:=mb[j]
else b:=maxlongint;
end;
end;
for i:=1 to d do writeln(mc[i]);
end.
procedure taomang;
begin
ai:=a;
for i:=1 to n do
15
begin
w[i]:=ai mod m +1;
ai:=(ai mod m)*(a mod m);
end;
end;
begin
assign(fi,fin);reset(fi);
assign(fo,fon);rewrite(fo);
read(fi,n, a, m);
taomang;
for i:=1 to n do s:=s+w[i];
writeln(fo,s);
close(fi);close(fo);
end.
16
Bài 18. Đếm hình vuông COUNTSQ
Cho một lưới ô vuông kích thước M N. Ô nằm trên giao của dòng i và cột j của lưới sẽ
được gọi là ô (i, j). Trên ô (i, j) của lưới người ta viết số nguyên không âm a ij. Ta gọi hình
vuông đồng nhất bậc 2 của lưới là tập gồm 4 ô nằm trên giao của hai dòng liên tiếp và 2
cột liên tiếp của lưới với các số viết trên chúng là như nhau.
Yêu cầu: Tính số lớn nhất các hình vuông đồng nhất bậc 2 chứa cùng một số.
Dữ liệu:
Dòng đầu tiên chứa các số nguyên dương M, N (M, N ≤ 1000);
Dòng thứ i trong số M dòng tiếp theo chứa các số ai1 ai2 ... aiN, i = 1, 2, ..., M, hai số
liên tiếp trên dòng được viết cách nhau một dấu cách. 0 ≤ a ij ≤ 255, i = 1, 2, ...,
M; j = 1, 2, ..., N.
Kết quả: số lượng hình vuông tìm được.
Ví dụ:
Input Output
5 10 3
0110220550
0110220550
0001100000
0801111090
0000011000
Chương trình
const fin='countsq.inp';
fon = 'countsq.out';
maxmn=1000;
var
m,n:longint;
a:array[1..maxmn,1..maxmn] of longint;
dem:array[0..255] of longint;
procedure enter;
var i,j:longint;
begin
readln(m, n);
for i:=1 to m do
for j:=1 to n do read(a[i,j]);
17
end;
procedure solve;
var i,j,imax:longint;
begin
for i:=1 to m-1 do
for j:=1 to n-1 do
if (a[i,j]=a[i,j+1]) and (a[i,j]=a[i+1,j]) and (a[i,j]=a[i+1,j+1]) then
inc(dem[a[i,j]]);
Imax:=0;
for i:=0 to 255 do
if dem[i]>dem[imax] then imax:=i;
//writeln(imax,' ',dem[imax]);
writeln(dem[imax]);
end;
begin
assign(input,fin);reset(input);
assign(output,fon);rewrite(output);
enter;
solve;
close(input);close(output);
end.
Đi từ trái qua phải, ở bất cứ vị trí nào số đóng phải (()) YES
nhỏ hơn hoặc bằng số ngoặc mở ()() NO
Yêu cầu: cho biết một xâu s có là một cách đặt ngoặc (((()) NO
đúng không? ))(( NO
Input (()))(()
function solve(s:string):boolean;
var dong,mo,i:longint;
begin
dong:=0;mo:=0;
for i:=1 to length(s) do
begin
if s[i]=')' then inc(dong)
else inc(mo);
if dong>mo then exit(false);
end;
if dong=mo then exit(true)
else exit(false);
end;
BEGIN
assign(input,fi);reset(input);
Assign(output,fo);rewrite(output);
Readln(n);
for i:=1 to n do
begin
readln(s);
if solve(s) then writeln('YES')
else writeln('NO');
end;
Close(input);close(output);
END.
19
Với xâu ký tự: ‘aaaabbb’ sẽ được nén lại thành xâu ‘4a3b’.
Với xâu ký tự ‘aaab’ sẽ được nén lại thành xâu ‘3ab’.
Cho một xâu ký tự St1 gồm các ký tự thuộc tập 'a'..'z'. Gọi St là xâu nén của xâu St1 theo
phương phápđược mô tả như trên. Xâu St gồm N (1 ¿ N ¿ 255) ký tự thuộc tập các ký
tự: 'a'..'z', '0'..'9'
Yêu cầu: Hãy giải nén xâu St để được xâu gốc St1.
Dữ liệu vào: xâu ký tự St.
Dữ liệu ra: Ghi xâu St1 là xâu sau khi đã được giải nén.
Ví dụ:
GNEN.INP GNEN.OUT
3a5bc aaabbbbbc
Chương trình
const
fi='gnenxau.in1';
fo='gnenxau.ou1;
var st,xso:string;
f,g:text;
i,j,k,n,code:integer;
begin
assign(f,fi); assign(g,fo);
reset(f); rewrite(g);
readln(f,st);
j:=1;
while j<=length(st) do
if st[j] in ['0'..'9'] then
begin
i:=j;
xso:='';
while st[i] in ['0'..'9'] do begin xso:=xso+st[i]; i:=i+1; end;
val(xso,n,code);
for k:=1 to n do write(g,st[i]);
j:=i+1
end
else begin write(g,st[j]); j:=j+1; end;
close(f);
close(g);
end.
20
Bài 21. Số bé nhất LEXDIV
Khi làm việc với các số tự nhiên, Tom và Jerry thích sắp xếp chúng theo thứ tự từ điển
giống như so sánh xâu kí tự, chẳng hạn dãy số (1, 8, 9, 10, 11, 100) sẽ được sắp xếp
thành (1, 10, 100, 11, 8, 9). Bài toán Tom đặt ra cho Jerry là: cho ba số A, B, K thì số
trong đoạn [A; B] chia hết cho K có thứ tự từ điển nhỏ nhất là số nào? Hãy giúp Jerry giải
bài toán trên.
Dữ liệu vào:Một dòng duy nhất ghi ba số nguyên A, B, K (1 ≤ A ≤ B ≤ 10 9, 1 ≤ K ≤ 109).
Dữ liệu vào đảm bảo luôn có nghiệm.
Dữ liệu ra: Một dòng duy nhất ghi một số nguyên tìm được.
Ví dụ:
Input Output Giải thích
96 105 3 102 Đoạn [96;105] có 4 số chia hết cho 3 là 96, 99, 102,
105. Dãy số trên được xếp theo thứ tự từđiển ởdạng xâu
là 102, 105, 96, 99. Vậy đáp án phải tìm là 102.
Chương trình
const
fin='test.inp'; fon='test.out';
var a,b,k:longint;
procedure nhap;
var i,j:longint;
begin
read(a, b, k);
end;
procedure xuli;
var
i:longint;
21
si,min:string;
begin
min:='a';
for i:=a to b do
if i mod k = 0 then
begin
str(i,si);
if si<min then min:=si;
end;
write(min);
end;
begin
assign(input,fin);reset(input);
assign(output,fon);rewrite(output);
nhap;
xuli;
close(input);close(output);
end.
Input Output
2 4
AABDDC 11
NANGKHIEUTINHOC
Chương trình
22
Const
Finame='test.inp';
Foname='test.out';
var s:string;
function dem(s:string):longint;
var
co:array['A'..'Z'] of boolean;
i,d:longint;
c:char;
begin
for c:='A' to 'Z' do co[c]:=false;
for i:=1 to length(s) do co[s[i]]:=true;
d:=0;
for c:='A' to 'Z' do
if co[c] then inc(d);
exit(d);
end;
procedure xuli;
var i,n:longint;
dx:boolean;
begin
readln(n);
for i:=1 to n do
begin
readln(s);
writeln(dem(s));
end;
end;
BEGIN
assign(input,finame);reset(input);
Assign(output,foname);rewrite(output);
nhap;xuli;
23
Close(input);close(output);
END.
24
Bài 23. COUNTCBG COUNT N
Với 1 số tự nhiên N(1<= N <= 10^9) ta có thể phân tích nó thành Input Output
tổng của một số số tự nhiên liên tiếp( tất nhiên những số này phải 12 1
nhỏ hơn N). Ví dụ với N = 5 ta có duy nhất 1 cách phân tích là 5 5 1
4 0
= 2+3. Bài toán đặt ra là cho số tự nhiên N, hãy cho biết có bao 13 1
nhiêu cách phân tích số tự nhiên N thành tổng của các số tự nhiên 45 5
liên tiếp. 100 2
234 5
Input: Gồm nhiều dòng, mỗi dòng chứa một số nguyên N. (Giới 3 1
hạn : số dòng <= 100) 175 5
Output Mỗi dòng ghi một số nguyên là số cách phân tích số N đọc được ở dòng tương
ứng trong input.
Chương trình
const fin=''; fon='';
var n,d:longint;
procedure count;
var i,j:longint;
begin
d:=0;
for i:=2 to trunc(sqrt(2*n)) do
begin
if 2*n mod i<>0 then continue;
j:=2*n div i;
if (n/i-(i-1)/2)=int(n/i-(j-1)/2) then inc(d);
if j<>i then if (n/j-(j-1)/2)=int(n/j-(j-1)/2) then inc(d);
end;
end;
procedure xuli;
begin
assign(input,fin); reset(input);
assign(output,fon); rewrite(output);
while not(eof(input)) do
begin
readln(n);
count;
writeln(d);
end;
25
end;
BEGIN
assign(input,fin);
reset(input);
assign(output,fon);
rewrite(output);
xuli;
close(input);
close(output);
END.
Chương trình
var i,j,k,n,t:longint;
begin
readln(t);
for j:=1 to t do
begin
readln(n);
for i:=1 to (n-1) div 9 do
write('123456790');
k:=(n-1) mod 9;
for i:=1 to k do
write(chr(48+i));
for i:=k+1 downto 2 do
write(chr(48+i));
for i:=1 to (n-1) div 9 do
write('098765432');
writeln(1);
end;
26
Bài 25. Vị trí POS
Bạn Nam rất thông minh và chăm học. Trong học kỳ vừa rồi, bạn ấy đã đạt danh hiệu học
sinh giỏi. Phần thưởng cho thành tích này của cậu là được anh dắt đi xem phim. Đứng
trong dòng người xếp hàng mua vé, vì là học sinh tò mò, Nam thắc mắc không hiểu là
mình đứng ở vị trí thứ mấy trong hàng người đó. Cậu bèn hỏi anh, muốn thử trí thông
minh của cậu em tò mò, anh bé Nam đưa ra câu đố:”Trong hàng bây giờ có n người, có
không ít hơn a người đứng trước em, và không nhiều hơn b người đứng sau em, em thử
đếm xem có bao nhiêu vị trí mà em có thể đứng trong hàng?”
Nam có vẻ bối rối với câu đố của anh trai, các bạn hãy giúp Nam
giải quyết bài toán này nhé. Input Output
3 1 1 2
Input: Gồm 3 số nguyên dương n, a, b (n, a, b ≤ 100) 5 2 3 3
Output: Gồm 1 dòng duy nhất là kết quả của bài toán
Chương trình
Const
fin = 'POS.INP'; fon = 'POS.OUT';
maxn=10000000+1;
Var
a,b,n,max:longint;
procedure solve;
begin
readln(n,a,b);
if a+1>n-b then max:=a+1 else max:=n-b;
if n+1<max then write(0)
else write(n-max+1);
end;
Begin
assign(input,fin);reset(input);
assign(output,fon);rewrite(output);
solve;
27
close(input);close(output);
End.
Chương trình
Const fi='TINNHAN.INP'; fo='TINNHAN.OUT';
var k:longint;
procedure giaima(s:string);
var i:longint;
begin
for i:=1 to length(s) do
begin
if ('A'<=s[i]) and (s[i]<='Z') then
begin
k:=k mod 26;
if ord(s[i])-64 - k > 0 then
write(chr(ord(s[i])-k))
28
else write(chr(ord(s[i])-k+26));
end
else write(s[i]);
end;
end;
procedure solve;
var
i,d,dem,lmax:longint;
a:array[1..200] of string;
x,s,s1:string;
begin
readln(s);
readln(k);
s:=s+'#';d:=0;x:='';
for i:=1 to length(s) do
if s[i]<>'#' then x:=x+s[i]
else
begin
inc(d);
a[d]:=x;
x:='';
end;
//for i:=1 to d do writeln(a[i]);
lmax:=0;
for i:=1 to d do
if length(a[i])>lmax then
begin
lmax:=length(a[i]);
s1:=a[i];
end;
dem:=0;
for i:=1 to d do
if length(a[i])=lmax then inc(dem);
writeln(dem);
//writeln(s1);
giaima(s1);
29
end;
Begin
Assign(input,fi); Reset(input);
Assign(output,fo); Rewrite(output);
solve;
Close (output);Close(input);
End.
Chương trình
const finp='path.inp';
fout='path.out';
var i, n, d, x, s: longint;
c: char;
30
begin
assign(input,finp);
reset(input);
assign(output,fout);
rewrite(output);
readln(n,d);
for i:=1 to n do begin
readln(c,c,x);
s:=s+x;
end;
writeln(S);
close(input);
close(output);
end.
31
Example
Input Output Giải thích
1 6
4 5
tinaa
hocaa
aaaaa
ccccc
bbbbd
btind
bhocd
Bbbbd
Chương trình
const fin='MESSAGE.INP';fon='MESSAGE.OUT';
maxn=10; maxm=10;
var f:array[0..maxN,0..maxn] of longint;
a,b:array[1..maxM,1..maxN] of char;
m,n:longint;
procedure enter;
var i,j:longint;
begin
readln(m,n);
for i:=1 to m do
begin
for j:=1 to n do read(a[i,j]);
readln;
end;
for i:=1 to m do
begin
for j:=1 to n do read(b[i,j]);
readln;
end;
end;
function ss(i,j,p,q,u,v:longint):longint;
var r,s:longint;
32
begin
for r:=0 to u-1 do
for s:=0 to v-1 do
if a[i+r,j+s] <>b[p+r,q+s] then exit(0);
exit(u*v);
end;
procedure SOLVE;
var u,v,p,q,i,j,kmax,imax,max,dt:longint;
begin
max:=0;
for u:=1 to m do
for v:=1 to n do
begin
//xet cac hinh kich thuoc (u,v) bang a
for i:=1 to m-u do
for j:=1 to n-v do
//voi moi hinh bang a, xet tat ca
//cac hinh bang b
for p:=1 to m-u do
for q:=1 to n-v do
begin
//so sanh hinh
dt:=ss(i,j,p,q,u,v);
if max<dt then max:=dt;
end;
end;
write(max);
end;
BEGIN
assign(input,fin);reset(input);
assign(output,fon);rewrite(output);
enter;
solve;
close(input);close(output);
END.
33
Bài 29. Từ dài nhất WORD
Hương có một xâu chứa các kí tự alphabe ‘a’…’z’ và các kí tự trống, cô ấy muốn tìm
trong xâu các từ dài nhất có kí tự bắt đầu trùng với một kí tự bất kỳ nào đó trong xâu.
Một từ theo Hương là một xâu chứa các kí tự liên tiếp không có kí tự trống là xâu con của
xâu đã cho. Ví dụ, Hương có xâu ‘ toi lo lang cho viêc hoc tap qua’. Kí tự bắt đầu
mà Hương muốn tìm là ‘t’, như vậy từ phải tìm là ‘toi’ , ‘tap’
Yêu cầu: Tìm các từ dài nhất theo yêu cầu của Hương
Dữ liệu vào: có cấu trúc như sau:
Dòng 1: Chứa một xâu chứa các kí tự thuộc ‘a’…’z’ và các kí tự trống. Độ dài của
xâu không quá 10000 ký tự
Dòng 2: Chứa một kí tự bất kỳ thuộc ‘a’…’z’
Dữ liệu ra: Mỗi dòng ghi một tìm được
Ví dụ:
Input Output
toi lo lang cho viec hoc tap qua di thoi toi
t tap
Chương trình
const
fin='word.inp';
fon='word.out';
procedure xuli;
var
i,d,n,max:longint;
w:array[1..1000] of string;
s:string;
c:char;
begin
n:=0;
s:='';
while not eoln do
begin
read(c);
if c<>' ' then s:=s+c
else
34
begin
if s<>'' then
begin
inc(n);
w[n]:=s;
s:='';
end;
end;
end;
inc(n);
w[n]:=s;
readln;
read(c);
//for i:=1 to n do writeln(w[i]);
//writeln(c);
max:=0;
for i:=1 to n do
if (w[i][1]=c) and (length(w[i])>max) then
max:=length(w[i]);
for i:=1 to n do
if (w[i][1]=c) and (length(w[i])=max) then
writeln(w[i]);
end;
begin
assign(input,fin);
reset(input);
assign(output,fon);
rewrite(output);
xuli;
close(input);
close(output);
end.
35
Bài 30. Tối giản phân số PHANSO
Một chuỗi được gọi là có dạng phân số nếu nó có dạng như sau: Tử_số/Mẫu_số.
Ví dụ:
chuỗi ‘123/456’ biểu diễn cho phân số
chuỗi ‘1/12’ biểu diễn cho phân số
Yêu cầu: cho chuỗi có dạng phân số. Sau đó xuất ra dạng tối giản của phân số đó.
Input: Xâu s biểu diễn phân số
Ouput: tối giản của phân số đó.
Ví dụ:
Input Output
12/15 3/4
Chương trình
Program Toigian;
Var
i,j,p:longint;
t,m,s:string;
kq1,kq2:extended;
t1,m1,uc,r:longint;
Begin
Write('Nhap phan so: ');
Readln(s);
t:='';
m:='';
For i:=1 to length(S) do
IF s[i]='/' then
p:=i;
For i:=1 to p-1 do
t:=t+s[i];
For j:=p+1 to length(s) do
m:=m+s[j];
val(t,t1,r);
val(m,m1,r);
For i:=1 to t1 do
If (t1 mod i =0) and (m1 mod i=0) then
uc:=i;
36
kq1:=t1/uc;
kq2:=m1/uc;
Write('Toi gian phan so la: ',kq1:0:0,'/',kq2:0:0);
Readln;
End.
37