30 BÀi tậP Ôn luyện thi hsg tin lớP 9



tải về 233.67 Kb.
Chuyển đổi dữ liệu23.07.2016
Kích233.67 Kb.
#2571

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 lequangvinh1912@gmail.com.

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

Output

Giải thích

5

3


4





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.

canvas 23

Ví dụ:

Input

Output

Giải thích

5

Dien tich hinh tron la 39.25



Test

Input

Output

Giải thích

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

9 la so chinh phuong

10

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

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

duoc




2 2 5

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

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

Output

2012

True

2010

false

2100

False

2000

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

end.


Bài 9.Đồng hồ CLOCK





Input

Output

8 30 0

8 30 1
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

Yêu cầu: Cho ba số h, p và s, hãy tìm 3 số 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);

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


Input

Output

130

414450
- 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%
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);

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)


Input

Output

5

-4

3



2

-5

7



-4
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á 105.

Yêu cầu: Hãy tìm số âm lớn nhất X trong dãy.

Dữ liệu

  • Dòng đầu tiên chứa số nguyên dương N (1N105).

  • 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)


Input

Output

2

3

5

15

1234

761995

45678

1043262681

89765

4028922495

5000000

12500002500000
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: 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 i

if 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:


  • Input

    Output

    5 4

    1 3 1 2 2



    3
    Dòng đầu là số nguyên dương n (n ≤ 106) và s (s ≤ 106)

  • N dòng sau, dòng thứ i là số nguyên dương ai (ai≤ 106)

Output: số cặp (ai, aj) thỏa đề bài
          1. Chương trình

const

fin='capso.inp';fon='capso.out';

max=1000000+5;

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)


  • Input

    Output

    6

    -18 -3 -1 8-7

    2

    2 5


    4 6

    12

    0

    Dòng sau gồm n số nguyên a1, a2, ..., an. (|ai|<1000)



  • 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.
          1. 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.

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

3 2

1

2



5

2

4



1

2

2



4

5

          1. 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);

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 w1, w2, …, wn theo công thức:

wi = ai mod m + 1

Tính tổng của dãy số này.


Input

Output

5 4 9

28
Input: 3 số n, a, m

Output: tổng dãy số

Giải thích: dãy số tạo được là: 5, 8, 2, 5, 8.


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

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.

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 aij. 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 ≤ aij ≤ 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

0 1 1 0 2 2 0 5 5 0

0 1 1 0 2 2 0 5 5 0

0 0 0 1 1 0 0 0 0 0

0 8 0 1 1 1 1 0 9 0

0 0 0 0 0 1 1 0 0 0



3

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



Input

Output

5

(())


()()

(((())


))((

(()))(()



YES

YES


NO

NO

NO



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

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

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

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 ≤ 109, 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;

si,min:string;


begin

min:='a';

for i:=a to b do

if i mod k = 0 then

begin

str(i,si);



if si

end;


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

AABDDC


NANGKHIEUTINHOC

4

11



          1. 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);

Assign(output,foname);rewrite(output);

nhap;xuli;

Close(input);close(output);

END.


Bài 23.COUNTCBG COUNT N



Input

Output

12

5

4



13

45

100



234

3

175



1

1

0



1

5

2



5

1

5


Với 1 số tự nhiên N(1<= N <= 10^9) ta có thể phân tích nó thành 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 nhỏ hơn N). Ví dụ với N = 5 ta có duy nhất 1 cách phân tích là 5 = 2+3. Bài toán đặt ra là cho số tự nhiên N, hãy cho biết có bao 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 liên tiếp.

Input: Gồm nhiều dòng, mỗi dòng 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.
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;


end;

BEGIN


assign(input,fin);

reset(input);

assign(output,fon);

rewrite(output);

xuli;

close(input);



close(output);

END.

Bài 24.MULONE Nhân 1


Cho số S = 111...11 (n chữ số 1, hệ thập phân), tính S2.


Input

Output

2

1

2



1

121


Input

  • Dòng đầu tiên: số lượng test k.

  • k dòng tiếp, mỗi dòng ghi số n - số lượng chữ số 1 của S. (1 <= n <= 1000000)

Output: Với mỗi test ghi kết quả trên 1 dòng.

}
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;

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?”




Input

Output

3 1 1

2

5 2 3

3
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: Gồm 3 số nguyên dương n, a, b (n, a, b ≤ 100)

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

else write(n-max+1);

end;

Begin


assign(input,fin);reset(input);

assign(output,fon);rewrite(output);

solve;

close(input);close(output);



End.

Bài 26.Giải mã tin nhắn TINNHAN


Có một tin nhắn được mã hóa và giấu trong một xâu văn bản trước khi gửi đi. Quy tắc mã hóa tin nhắn là thay mỗi chữ cái trong tin nhắn thành một chữ cái đứng cách nó k vị trí trong bảng chữ cái tiếng Anh theo quy tắc xoay vòng, các ký tự không phải chữ cái thì không thay đổi. Trong xâu có thể có nhiều tin nhắn, giữa các tin nhắn được ngăn cách nhau bởi dấu #. Biết rằng tin nhắn có độ dài lớn nhất là tin nhắn cần tìm. Nếu có nhiều tin nhắn có cùng chiều dài thì tin nhắn đầu tiên tìm thấy là tin nhắn cần giải mã.

Yêu cầu: Cho trước một xâu S dài không quá 255 ký tự và một số nguyên dương k. Hãy tìm và giải mã tin nhắn được giấu trong xâu S.

Input: Cho trong tệp văn bản có tên TINNHAN.INP gồm hai dòng:

− Dòng đầu: xâu S;

− Dòng thứ hai: số nguyên dương k.

Ouput: Xuất ra tệp văn bản có tên TINNHAN.OUT gồm hai dòng:

− Dòng đầu: số lượng tin nhắn tìm được;

− Dòng thứ hai: nội dung tin nhắn cần tìm đã được giải mã.

Ví dụ


Input

Output

ABC#QBTDBM#123HGF

1


2

PASCAL

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

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

end;
Begin

Assign(input,fi); Reset(input);

Assign(output,fo); Rewrite(output);

solve;


Close (output);Close(input);

End.

Bài 27.Đường đi PATH(NK 2006)


Một con robot di chuyển theo một chương trình định sẵn trên mặt phẳng toạ độ. Chương trình này được thể hiện dưới dạng một dãy N lệnh (1N3000). Các lệnh thuộc một trong các dạng sau:

  • F S: Đi thẳng theo hướng hiện tại S bước.

  • R S: Rẽ phải 90và đi S bước.

  • L S: Rẽ trái 900 và đi S bước.

Yêu cầu: Cho một chương trình điều khiển robot, hãy xác định chiều dài T đoạn đường mà con robot đã đi được, biết mỗi bước của nó dài d(cm). Ban đầu con robot đứng tại vị trí (0,0) và hướng theo chiều dương của trục hoành.

Dữ liệu: Vào từ file văn bản PATH.INP:

  • Dòng đầu tiên chứa 2 số nguyên dương Nd.

  • N dòng tiếp theo, mỗi dòng chứa một lệnh theo quy cách nêu trên.

Kết quả: Ghi ra file PATH.OUT chứa chiều dài T tìm được.

Ví dụ:


PATH.INP




PATH.OUT

4 1

F 5


R 7

F 2


L 9




23
Chương trình

const finp='path.inp';

fout='path.out';


var i, n, d, x, s: longint;

c: char;


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.

Bài 28.MESSAGE1 VOI 2013 - Trao đổi thông tin


An và Bình thường trao đổi thông tin qua mạng. Để tránh người khác đọc được, hai bạn đã thống nhất cách truyền thông tin qua hai bước :

  • Bước 1 : Giấu thông tin. Nội dung thông tin cần gửi sẽ được giấu vào một bảng kí tự hình chữ nhật bằng cách điền lần lượt các kí tự của xâu biểu diễn vào các ô của bảng từ trên xuống dưới theo mỗi hàng và từ trái qua phải theo mỗi cột. Bảng này được đặt gọn vào một bảng kí tự hình chữ nhật có kích thước MxN lớn hơn. Các ô trống của bảng MxN sẽ được điền kí tự ngẫu nhiên

  • Bước 2 : Giải thông tin. Bảng MxN được gửi qua mạng. Vị trí đặt hình chữ nhật chứa nội dung được gửi qua điện thoại bằng tin nhắn.

Trong một lần An chuyển bảng A qua cho Bình, tuy nhiên Bình không nhận được. An thực hiện lại và chuyển bảng B qua. 2 bảng A và B đều chứa hình chữ nhật nội dung thông tin, tuy nhiên vị trí đặt hình này có thể khác nhau. Em gái Bình biết được quy ước trao đổi thông tin. Tò mò, cô muốn biết An đã gửi thông tin gì cho Bình bằng cách tìm một bảng hình chữ nhật có diện tích lớn nhất xuất hiện trong cả 2 bảng A và B.

Input: Dòng đầu chứa T – số lượng testcase. T nhóm dòng, mỗi nhóm miêu tả 1 testcase.

  • Dòng thứ nhất chứa 2 số nguyên dương M, N.

  • Dòng thứ i trong M dòng tiếp theo chứa một xâu gồm N kí tự chỉ gồm các chữ cái la tinh thường mô tả bảng A.

  • Dòng thứ j trong M dòng tiếp theo chứa một xâu gồm N kí tự chỉ gồm các chữ cái la tinh thường mô tả bảng B.

Output: Gồm T dòng, dòng thứ i ghi một số nguyên là diện tích hình chữ nhất lớn nhất tìm được tương ứng với testcase thứ i.

Example

Input

Output

Giải thích

1

4 5


tinaa

hocaa

aaaaa


ccccc

bbbbd


btind

bhocd

Bbbbd


6





Giới hạn: 30% số điểm có m, n ≤ 10, 30% số test có 10 < max(m,n) ≤ 40
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;

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

end;

end;


write(max);
end;
BEGIN

assign(input,fin);reset(input);

assign(output,fon);rewrite(output);

enter;


solve;

close(input);close(output);

END.

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

t


toi

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

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.

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;

kq1:=t1/uc;



kq2:=m1/uc;

Write('Toi gian phan so la: ',kq1:0:0,'/',kq2:0:0);



Readln;

End.



Каталог: data
data -> HƯỚng dẫn càI ĐẶt và SỬ DỤng phần mềm tạo bài giảng e-learning
data -> CỘng hòa xã HỘi chủ nghĩa việt nam độc lập Tự do Hạnh phúc
data -> Qcvn 81: 2014/bgtvt
data -> Trung taâm tin hoïC Ñhsp ñEÀ thi hoïc phaàn access
data -> PHỤ LỤC 2 TỔng hợp danh mục tài liệu tham khảO
data -> Công ty cổ phần Xây dựng Điện vneco3
data -> Nghiên cứu một số đặc điểm
data -> NHỮng đÓng góp mới của luậN Án tiến sĩ CẤP ĐẠi học huế Họ và tên ncs : Nguyễn Văn Tuấn
data -> Mẫu 01/hc-sn-dn (Ban hành kèm theo Thông tư số 83/2007/tt-btc ngày 16/7/2007 của Bộ Tài chính) TỜ khai hiện trạng sử DỤng nhà, ĐẤt thuộc sở HỮu nhà NƯỚc và ĐỀ xuất phưƠng án xử LÝ

tải về 233.67 Kb.

Chia sẻ với bạn bè của bạn:




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương