Tải bản đầy đủ (.doc) (37 trang)

30 b i t p n LUY n THI HSG TIN l p 9 new d

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (349.99 KB, 37 trang )

30 BÀI TẬP ÔN LUYỆN THI HSG TIN LỚP 9
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
Xin chân thành cảm ơn!
Bài 1.
Tính tổng TINHTONG
Nhập số nguyên dương n. Tính tổng s = 2 + 4 + 6 + … + 2n
Ví dụ:
Input
Output
Giải thích
10

Tong S la: 110

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.
Bài 2.


Tính cạnh kề CANHKE (3 điểm)
Nhập độ dài cạnh huyền và một cạnh kề của tam giác vuông. Tính độ dài cạnh kề còn lại.
Làm tròn 2 chữ số thập phân.
Ví dụ:
Input
Output
5 3

4.00

Test
Input
5
3

Output

Giải thích

4

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.
Bài 3.
Tính diện tích DTHT (2 điểm)
Cho cạnh hình vuông, tính diện tích hình tròn trong hình sau. Kết quả làm tròn 2 chữ số
thập phân. Sử dụng số pi = 3.14.


Ví dụ:
Input
5

Output

Giải thích

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.
Bài 4.
Kiểm tra số chính phương CPHUONG
Số chính phương là bình phương của một số nguyên. Nhập số tự nhiên n. Cho biết n có
phải số chính phương hay không?
Input
Output
9
10

9 la so chinh phuong

10 khong la so chinh phuong

Chương trình Test
const fi='cphuong.inp';fo='cphuong.out';
var
n:longint;
begin
assign(input,fi);reset(input);
assign(output,fo);rewrite(output);
readln(n);
if sqrt(n) = trunc(sqrt(n)) then
write(n,' la so chinh phuong')
else
write(n,' khong la so chinh phuong');
close(input);close(output);
3


end.
Bài 5.
Kiểm tra tam giác KTTG
Mẹ Bi cho Bi một số que gỗ và đố Bi chọn được 3
que để xếp thành một hình tam giác. Bi chỉ biết độ
dài 3 que gỗ mình sẽ lấy chứ không được xếp thử
trước.
Yêu cầu: hãy giúp bé Bi kiểm tra xem 3 que gỗ đã
lấy có xếp được thành tam giác hay không?
Input: độ dài 3 que gỗ
Output: kết luận có xếp được không
Ví dụ:

Input
Output
Giải thích
3 4 5
2 2 5

duoc
khong

Gợi ý: để 3 đoạn có thể xếp thành một tam giác thì tổng hai đoạn phải luôn lớn hơn đoạn
còn lại.
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.
Bài 6.
Tính tiền internet 1 NET1
Một dịch vụ tính phí Internet như sau: Từ phút thứ 1 đến
phút thứ 60 tính 80 đ/1 phút. Từ phút thứ 61 đến phút thứ
120 tính 50 đ/1 phút. Từ phút thứ 121 trở đi tính 30 đ/1

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.
Bài 7.
Số ngày SONGAY

Nhập vào tháng và năm. Cho biết tháng đó có bao nhiêu ngày. Biết năm nhuận là năm
chia hết cho 400 hoặc không tròn trăm nhưng chia hết cho 4
Input
Output
3 2013
31
Chương trình test
const fi='songay.inp';fo='songay.out';
var
n,t:longint;
begin
assign(input,fi);reset(input);
assign(output,fo);rewrite(output);
readln(t,n);
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.
Bài 8.


Năm nhuận NHUAN

Input
2012
2010
2100
2000

Output
True
false
False
true

Năm nhuận là năm có 366 ngày và tháng 2 năm đó có 29 ngày. Ta
có cách xác định năm nhuận như sau: năm nhuận là năm chia hết
cho 400 hoặc không tròn trăm nhưng chia hết cho 4. Viết chương
trình nhập vào một năm bất kì, cho biết đó có phải năm nhuận không ?Chương trình
Test
const fi='nhuan.inp';fo='nhuan.out';
var
n:longint;
begin
assign(input,fi);reset(input);
assign(output,fo);rewrite(output);
readln(n);
if (n mod 400 = 0) or ((n mod 100<>0) and (n mod 4 = 0)) then
writeln('true')
else writeln('false');
close(input);close(output);

6


end.
Bài 9.

Đồng hồ CLOCK

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ộ Input
Output
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ớiYêu cầu: Cho ba số h, p và s, hãy tìm 3 số 8 30 0 8 30 1
h1, p1 và s1.
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);
7


end.
Bài 10.

Tiền taxi TAXI

Tính tiền đi taxi từ số km đã đi được nhập vào, biết:
- 1 km đầu giá 5000đ.
- Từ km thứ 2 – thứ 5: 4500 đ/km - Từ km thứ 6 trở đi: 3500
đ/km, đi hơn 120 km sẽ được giảm 10% trên tổng số tiền theo
quy định. (làm tròn 2 chữ số thập phân)
Giải thích ví dụ: (5000+ 4*4500 + 125*3500)*90%

Input
130

Output
414450

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);
8


Close(input);Close(output);
End.
Bài 11. Số đảo ngược SODAO
Tìm số đảo ngược Y của một số X, biết Y gồm các chữ số của X và viết theo thứ tự
ngược lại. Xuất ra kết quả là số Y mod 19
Input
Output
Giải thích
123

17

321 mod 19 = 17


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.
Bài 12. Số âm lớn nhất SOAM
(Tuyến sinh phổ thông năng khiếu 2007)
5
Cho một dãy gồm N số nguyên a1, a2, …, aN, mỗi số có giá trị tuyệt đối không vượt quá 10 .
Yêu cầu: Hãy tìm số âm lớn nhất X trong dãy.
Input
Output
Dữ liệu

5
-4
3
2
-5
7

-4

9


• Dòng đầu tiên chứa số nguyên dương N (1 N 105).
• N dòng tiếp theo, dòng thứ i chứa số ai.
Kết quả: Ghi một dòng duy nhất số X tìm được. Trong trường hợp không có lời giải, ghi
ra số 0.
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.
Bài 13. Tổng lũy thừa bậc 3 TLTB3
(HSG Kiên Giang 2009)
Cho biểu thức S = 13
+ 23 + ... + n3 = m2 với mọi m,n thuộc N*.
Tổng các lũy thừa bậc 3 của n số nguyên dương liên
tiếp bằng m2, tính chất này đã được chứng minh trong
toán học.
Yêu cầu: Kiểm chứng tính chất trên bằng cách tính giá
trị của m với số nguyên dương n cho trước (1 ≤ n ≤
5000000)

Input
2
5
1234
45678
89765
5000000

Output
3
15
761995

1043262681
4028922495
12500002500000

10


Input: Gồm 1 số dòng, mỗi dòng có 1 số n duy nhất
Ouput: Mỗi dòng xuất ra giá trị m tương ứng tìm được
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 iif n=i then writeln(fo,1)
else writeln(fo,0);
close(fi);close(fo);
end.
Bài 14. Cặp số CAPSO
Cho dãy n số nguyên dương a1, a2, …, an và số nguyên dương S. Hãy đếm xem có bao

nhiêu cặp phần tử (ai, aj) (i <> j) thỏa mãn ai + aj = S.
Input:
• Dòng đầu là số nguyên dương n (n ≤ 106) và s (s ≤ 106)
Input
Output
• N dòng sau, dòng thứ i là số nguyên dương ai (a i≤ 106)
54
3
Output: số cặp (ai, aj) thỏa đề bài
13122
Chương trình
const
fin='capso.inp';fon='capso.out';
max=1000000+5;
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.
Bài 15. Đoạn con liên tiếp DOANLT
Nhập số nguyên dương N. Sau đó nhập 1 dãy a gồm N phần tử. Bạn được cho m truy
vấn, mỗi truy vấn cung cấp 2 số x, y, yêu cầu bạn phải tính tổng đoạn con liên tiếp từ a[x]
đến a[y]
Input
• Dòng đầu là số nguyên N (0 < n < 106)
• Dòng sau gồm n số nguyên a1, a2, ..., an. (|ai|<1000)
Input
Output
6

12

-18 -3 -1 8-7

0


2
2 5
4 6

12


• Dòng tiếp theo là số nguyên dương m (0 < m < 106)
• M dòng tiếp theo, mỗi dòng ghi 2 số x, y (1 ≤ 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
32
1
2
5
2
4

Output
1
2
2
4
5
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;
inc(i);
14


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.
Bài 17. Tạo mảng theo công thức TAOMANG
Em được cho trước số nguyên dương n, hai số nguyên dương a, m. Hãy xác định dãy w 1,
w2, …, wn theo công thức:
wi = ai mod m + 1
Tính tổng của dãy số này.
Input: 3 số n, a, m
Input
Output
Output: tổng dãy số
549
28
Giải thích: dãy số tạo được là: 5, 8, 2, 5, 8.
Chương trình TEST
const fin = 'taomang.inp'; fon = ' taomang.out';
var
n, t, a, m,ai,s,max:int64;
i,j:longint;
k,im,jm,km:int64;
w:array[1..1000000] of longint;
fi,fo:text;
procedure taomang;
begin
ai:=a;
for i:=1 to n do
begin
15



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ố a i1 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]);
end;
17


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.
Bài 19.

Kiểm tra ngoặc đơn đúng NGOAC

• Xét xâu S chỉ bao gồm các kí tự ngoặc mở ‘(‘ và
ngoặc đóng ‘)’. Xâu S xác định một cách đặt ngoặc
đúng, nếu thỏa mãn các điều kiện:Tổng số ngoặc
đóng = tổng số ngoặc mở
• Đi từ trái qua phải, ở bất cứ vị trí nào số đóng phải
nhỏ hơn hoặc bằng số ngoặc mở
Yêu cầu: cho biết một xâu s có là một cách đặt ngoặc
đúng không?

Input
• Dòng dầu là số test t (0 < t < 100)
• t dòng sau, mỗi dòng 1 xâu s không quá 200 kí tự.

Input

Output

5

YES

(())

YES

()()

NO

(((())

NO

))((

NO

(()))(()


18


Output: t dòng, mỗi dòng là kết quả 1 test tương ứng, xuất “YES” nếu cách đặt ngoặc
đúng, ngược lại xuất “NO”
Chương trình TEST
Const fi='ngoac.inp';Fo='ngoac.out';
var n,i:longint;
s:string;
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.

Bài 20. Giải nén xâu GNEN
Đề thi tin học trẻ bảng C tỉnh Quảng Bình năm 2009
19


Trong máy tính, để tiết kiệm bộ nhớ, người ta thường tìm cách nén dữ liệu. Trong việc
nén văn bản, ta sử dụng một phương pháp đơn giản được mô tả thông qua ví dụ sau:
Ví dụ:
• 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);
reset(f);

assign(g,fo);

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;

20



close(f);
close(g);
end.

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;

21


procedure xuli;
var
i:longint;
si,min:string;
begin
min:='a';
for i:=a to b do
if i mod k = 0 then
begin
str(i,si);
if siend;
write(min);

end;
begin
assign(input,fin);reset(input);
assign(output,fon);rewrite(output);
nhap;
xuli;
close(input);close(output);
end.

Bài 22. Đếm kí tự khác nhau KTKHAC
Nhập xâu s chỉ chứa các chữ cái viết hoa. Đếm xem s có bao nhiêu kí tự khác nhau.
Input
• Dòng 1: số test t
• t dòng sau: mỗi dòng 1 xâu s ít hơn 255 kí tự
Output: t dòng, mỗi dòng là kết quả 1 test tương ứng.
Ví dụ
Input

Output

2

4

AABDDC

11

NANGKHIEUTINHOC


22


Chương trình
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);
23


Assign(output,foname);rewrite(output);
nhap;xuli;
Close(input);close(output);
END.

24


Bài 23.

COUNTCBG COUNT N
Input

Output

1
Với 1 số tự nhiên N(1<= N <= 10^9) ta có thể phân tích nó
1
thành tổng của một số số tự nhiên liên tiếp( tất nhiên những
0
số này phải nhỏ hơn N). Ví dụ với N = 5 ta có duy nhất 1 cách
1
5

phân tích là 5 = 2+3. Bài toán đặt ra là cho số tự nhiên N, hãy
2
cho biết có bao nhiêu cách phân tích số tự nhiên N thành tổng
5
của các số tự nhiên liên tiếp.Input: Gồm nhiều dòng, mỗi dòng
1
5
chứa một số nguyên N. (Giới hạn : số dòng <= 100)
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.
12
5
4
13
45
100
234
3
175

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


×