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

1 bài tập pascal tuyển chọn

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 (187.61 KB, 9 trang )

Bài tập pascal:
1. Phân tích số N thành tổng các số liền nhau
VD1:
Nhập N=15
15 = 1+2+3+4+5
15=4+5+6
kết quả đưa ra 15=1+2+3+4+5 thỏa mãn bài toán
VD2:Nhập N=8
kết quả: k
uses crt;
var
so,i,N: integer;
s,si:string[30];
kt:boolean;
begin
clrscr;
write('Moi ban nhap so N='); readln(N);
so:=0;i:=1; s:='1';
while so < N do
begin
so:=so+i;
i:=i+1;
str(i,si);
s:=s+ '+'+ si;
end;
if so=N then writeln('Ket qua la:',s)
else writeln('Ket qua la: bo tay');
readln
end.
-------------------------------------------2. Tìm số nguyên dương a nhỏ nhất thỏa mãn: a^a chia hết N. (Số lớn) »
3. Cho một số nguyên X có N chữ số, viết chương trình xóa 1 chữ số của X để


được số có N-1 chữ số có giá trị lớn nhất.
Ví dụ: - Nếu X=345987 Ta sẽ xóa số 3, số thu được sẽ là 45987 là số lớn nhất
- Nếu X =845987 ta sẽ xóa số 4, số thu được sẽ là 85987 là số lớn nhất
\\\\\\\\\\\\\\\\\\
------------------------------------------------------------4. Cho dãy gồm N số nguyên, viết chương trình đưa ra màn hình dãy không tăng
(không giảm) lớn nhất, nhỏ nhất.
uses crt;
var a:array[1..20] of integer;
i,j,vt,leng,N, max: integer;
begin
write('Nhap so N='); readln(n);
for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end;
vt:=1; max:=1;
i:=1;
while i<=N do


begin
leng:=1; j:=i;
while a[j]<=a[j+1] do
begin
leng:=leng+1;
j:=j+1;
end;
if leng> max then
begin
max:=leng;
vt:=j-leng+1;
end;
i:=j+1;

end;
writeln('Day con do dai: ',max,' bat dau tu vi tri: ',vt);
readln;
end.
-------------------------------------------------5. Cho dãy gồm N số nguyên, đưa ra màn hình dãy liên tục có tổng lớn nhất, nhỏ
nhất.
{tim day con co tong lon nhat, nho nhat}
uses crt;
var a:array[1..20] of integer;
i,j,vt,tong,leng,N, max: integer;
begin
write('Nhap so N='); readln(n);
for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end;
vt:=1; max:=a[1];
i:=1;
while i<=N do
begin
j:=i; tong:=a[j]; leng:=1;
while a[j]<=a[j+1] do
begin
tong:=tong+a[j+1];
leng:=leng+1;
j:=j+1;
end;
if tong> max then
begin
max:=tong;
vt:=j-leng+1;
end;
i:=j+1;

end;
writeln('Tong max la:',max,' Day con do dai: ',leng,' bat dau tu vi tri: ',vt);
readln;
end.
-----------------------------------------------


6. Viết liên tiếp N số nguyên lần lượt từ 1 đến N, nhập giá trị k, viết chương trình
xác định giá trị của số ở vị trí k là bao nhiêu.
VD: với N=13 ta có dãy số sau: 12345678910111213
k= 15, giá trị của số ở vị trí 15 là: [2]
var
num,i,k,n:integer;
istr:string[10];
kt:boolean;
begin
write('Moi nhap so N='); readln(n);
write('Moi nhap so K='); readln(k);
kt:=true;
i:=1; num:=0;
while (k>num) and (ibegin
str(i,istr);
num:=num+length(istr);
i:=i+1;
end;
if (i>=N) and (K>num) then writeln('So K qua lon')
else
if k=num then writeln('So o vi tri ',k,' co gia tri la:',istr[length(istr)])
else writeln('So o vi tri ',k,' co gia tri la:',istr[num-k]);

readln;
end.
-----------------------------------------------------------7. Viết chương trình tính an , với n<=200, a là số nguyên <=9.
{tinh a^N}
var
so:string;
a,n,i:byte;
function NHAN(var soStr:string; var a:byte):string;
var
ketqua,iStr,igt,inho:string;
code:integer;
i,len,nho,gt,tich,iso:byte;
begin
len:=length(soStr);
nho:=0; gt:=0; ketqua:='';
for i:=len downto 1 do
begin
val(soStr[i],iso,code);
tich:=iso*a+nho;
gt:=tich mod 10;
nho:=tich div 10;
str(gt,igt);
ketqua:=igt+ketqua;
end;
if nho<>0 then


begin
str(nho,inho);
ketqua:=inho+ketqua;

end;
NHAN:=ketqua;
end;
BEGIN
Write('Moi nhap so N='); readln(n);
write('Moi nhap so a='); readln(a);
str(a,so);
for i:=2 to N do
so:=NHAN(so,a);
writeln(A,'^',N,'=',so);
readln;
END.
-------------------------------------------------------------8. Viết chương trình cộng 2 số: an+bm
{tinh a^N+b^M}
uses crt;
var
TongAB,soA,soB:string;
a,b,n,m,i:byte;
function NHAN(var soStr:string; var a:byte):string;
var
ketqua,iStr,igt,inho:string;
code:integer;
i,len,nho,gt,tich,iso:byte;
begin
len:=length(soStr);
nho:=0; gt:=0; ketqua:='';
for i:=len downto 1 do
begin
val(soStr[i],iso,code);
tich:=iso*a+nho;

gt:=tich mod 10;
nho:=tich div 10;
str(gt,igt);
ketqua:=igt+ketqua;
end;
if nho<>0 then
begin
str(nho,inho);
ketqua:=inho+ketqua;
end;
NHAN:=ketqua;
end;


Function CONG(Var Str1,Str2:string):String;
var
i,len1,len2,delta:byte;
iso1, iso2, nho,tong,gt:byte;
inho,igt,ketqua:string;
code:integer;
begin
len1:=length(Str1);
len2:=length(str2);
if len1>len2 then
begin
delta:=len1-len2;
for i:=1 to delta do str2:='0'+str2;
end
else
Begin

delta:=len2-len1;
for i:=1 to delta do str1:='0'+str1;
end;
{sau khi do dai Str1 = str2, ta bat dau cong tung so tuong ung}
delta:=length(Str1); nho:=0;
for i:=delta downto 1 do
begin
val(str1[i],iso1,code);
val(str2[i],iso2,code);
tong:=iso1+iso2+nho;
gt:=tong mod 10;
nho:=tong div 10;
str(gt,igt);
ketqua:=igt+ketqua;
end;
if nho<>0 then
begin
str(nho,inho);
ketqua:=inho+ketqua;
end;
CONG:=ketqua;
end;
BEGIN
clrscr;
TongAB:='';
Write('Moi nhap so N='); readln(n);
write('Moi nhap so a='); readln(a);
Write('Moi nhap so M='); readln(M);
write('Moi nhap so b='); readln(b);
str(a,soA);

Str(b,soB);
for i:=2 to N do
soA:=NHAN(soA,a);


for i:=2 to M do
soB:=NHAN(soB,b);
writeln(A,'^',N,'=',soA);
writeln(B,'^',M,'=',soB);
TongAB:=CONG(soA,soB);
writeln('Tong 2 so:');
Writeln(' ',soA:10);
Writeln(' ',soB:10);
writeln('-----------');
Writeln(TongAB:10);
readln;
END.
---------------------------------------------------------------Hic, hôm nay tui - một học sinh lớp 9, thi tin học không chuyên về, có cái đề
gần như quá tầm, mong được giải đáp (đề phát vào 26/4/2009; tại Thành phố
Rạch Giá-Tỉnh Kiên Giang):
1./ Viết chương trình nhập vào 1 số tư nhiên n (1<=n<=1000). Cho biét có
bao nhiêu số chia hết cho 3 và tính tổng các số đó
Dữ liệu vào: được cho trong tập tin văn bản CHIAHET.INP gồm 1 dòng duy nhất
ghi giá trị n
Dữ liệu ra: ghi vào tập tin văn bản CHIAHET.OUT gồm 2 dòng:
- Cho biết có bao nhiêu số chia hết cho 3.
- Tổng các số đó.
2./ Một dãy số a1,a2,a3,...an được gọi là dãy tăng dần nếu:
a1<=a2<=a3...<=an
Cho 1 dãy gồm tối đa n số (1<=n<=100). Viết chương trình tìm chiều dài dãy

con liên tiếp tăng dần dài nhất trong dãy nói trên.
Dữ liệu vào: được cho trong tập tin văn bản DAYSO.INP gồm n+1 dòng:
- 1: ghi giá trị n.
- n dòng tiếp theo là n số nguyên dương.
Dữ liệu ra: ghi vào tập tin văn bản DAYSO.OUT gồm một số duy nhất là độ dài
của dãy con liên tiếp dài nhất vừa tìm được. (bài này làm được luôn)
3./ Một chuỗi gọi là đối xứng nếu nó không có ít hơn 1 ký tự và nếu đọc từ trái
sang hay từ phải sang đều như nhau.
Viết chương trình nhập vào chuỗi ký tự cho trước S co chiều dài n
(1<=n<=1000) và cho biết chiều dài chuỗi con đối xứng dài nhất trong chuỗi
S. Chuỗi con của S là chuỗi gồm một số ký tự liên tiếp nhau trong S có độ dài
nhỏ hơn hoặc bằng n.
Dữ liệu vào: được cho trong tập tin văn bản CHUOISO.INP gồm 2 dòng;
- Giá trị n.
- N ký tự liễn tiếp gồm các chữ cái in hoa.
Dữ liệu ra: ghi vào tập tin văn bản CHUOISO.OUT gồm một số duy nhất là độ
dài chuỗi con đối xứng dài nhất vừa tìm được.( bài này chịu).
\\\\\\\\\\\\\\\\\\\\\\
Thấy bài này ngồ ngộ, post lên cho anh em xem thử
Có N vị khách đến nhà hàng, vị khách thứ i đến vào thời điểm t và dự định tiêu
hết Pi đồng. Cửa nhà hàng có k+1 trạng thái, mỗi trạng thái được thể hiện


bằng một số nguyên trong khoảng 0..k, trạng thái s có nghĩa là các bóng đèn
trang trí ở cửa nhà hàng có màu s. Sau mỗi đơn vị thời gian, trạng thái s của
cửa nhà hàng có thể thay đổi bằng trạng thái trước s là s-1 (nếu s>0) hoặc có
thể được thay đổi bằng trạng thái sau s là s+1 (nếu snguyên trạng thái s. Vị khách thứ i sẽ vào nhà hàng nếu tại thời điểm anh ta
đến, màu bóng đèn trang trí tại cửa nhà hàng là màu Ci (màu anh ta thích),
nếu không anh ta sẽ bỏ đi và không trở lại.

Cửa hàng bắt đầu mở cửa tại thời điểm 0 và có trạng thái 0. Tính xem nhà
hàng thu được tối đa bao nhiêu tiền.
res.inp:
- Dòng đầu là 2 số nguyên N và k (1<= N <= 1000, 1<= k <=100).
- N dòng sau, mỗi dòng 3 số nguyên Ti,Pi,Ci (0=res.out:
1 dòng duy nhất chứa số tiền lớn nhất có thể thu được.
\\\\\\\\\\\\\\\\\\\\\\
Đề thi học sinh giỏi Tin học tỉnh Vĩnh Phúc
Bài 1. TÌM SỐ
Cho số nguyên X. Hãy lập trình tìm số nguyên Y nhỏ nhất thoả mãn đồng thời
các điều kiện sau:
Điều kiện 1: Y lớn hơn X.
Điều kiện 2: Số lượng mỗi loại chữ số có trong Y đúng bằng số lượng loại chữ
số tương ứng có trong X.
Dữ liệu: Vào từ tệp văn bản FINDNUM.INP gồm duy nhất số X (|X| ≤ 999999).
Chữ số đầu tiên của X khác 0.
Kết quả: Ghi ra tệp văn bản FINDNUM.OUT số Y tìm được. Nếu không có số Y
như vậy, ghi ra số 0.
VÍ DỤ FINDNUM.INP FINDNUM.OUT
Test 2 330
0
Test 3 -876200
-876020
Test 4 100122
100212
Bài 2. MÁY RÚT TIỀN ATM
Sau một thời gian tìm kiếm. Cuối cùng Bờm cũng đã tìm được một công việc
tại ngân hàng KID Bank là ngân hàng mới được thành lập tại thị trấn. Một hôm
nọ, Bờm được giám đốc gọi lên và giao nhiệm vụ lập chương trình cho máy rút

tiền tự động - ATM. Khổ nỗi, Bờm chỉ được đào tạo về sửa chữa máy tính và
những hư hỏng thông thường của máy PHOTO, máy FAX và … lập trình PASCAL
căn bản!.
Qua một thời gian tìm hiểu, Bờm thấy rằng, trong máy ATM có 6 ngăn đựng
tiền riêng, các tờ tiền mệnh giá X lần lượt xếp vào các ngăn theo chiều từ trên
xuống là: 10 đồng, 20 đồng, 50 đồng, 100 đồng, 200 đồng và 500 đồng, mỗi
mệnh giá tiền X đồng đó lại có Y tờ tiền nhất định.
Hãy giúp Bờm viết chương trình cho máy ATM sao cho tổng số lượng tờ tiền
khách hàng nhận được là ít nhất mỗi khi khách hàng rút tiền.
Dữ liệu: Vào từ tệp văn bản ATM.INP gồm 7 dòng:
- Dòng thứ nhất ghi số nguyên N là số tiền khách hàng cần rút.
- Trong 6 dòng tiếp theo, mỗi dòng ghi:
· Số thứ nhất là mệnh giá tiền X đồng.
· Số thứ hai Y là số tờ tiền của mệnh giá X đồng hiện còn trong máy ATM (số tờ


tin ca mi loi mnh giỏ khụng quỏ 1000 t).
Kt qu: a ra tp vn bn ATM.OUT gm mt dũng duy nht ghi tng s t
tin m khỏch hng nhn c. Nu khụng cú phng ỏn rỳt tin thỡ ghi s -1.
Vớ d:
Vớ d 1 Vớ d 2
ATM.INP ATM.OUT ATM.INP ATM.OUT
180
10 44
20 2
50 3
100 2
200 0
500 9 4 10
10 0

20 2
50 3
100 2
200 1
500 0 -1
Gii thớch vớ d:
Vớ d 1: Mỏy phi a ra mt t 100 ng, mt t 50 ng, mt t 20 ng,
mt t 10 ng, vy tng s t tin a ra l 4.
Vớ d 2: Mỏy khụng cú phng ỏn tr tin hp l, vy ghi ra -1.
Chỳ ý:
- Trong mi dũng ca cỏc tp d liu vo v d liu ra, cỏc s cỏch nhau mt
du cỏch.
- D liu vo l chun.
\\\\\\\\\\\\\\\\\
thi TP Nng
Bài 3:Khoảng cách xâu
Với một xâu ký tự, ta có thể tiến hành các phép biến đổi sau:
1. Thay một ký tự bất kỳ bởi một ký tự khác, chẳng hạn: test thành
text.
2. Xóa một ký tự bất kỳ, chẳng hạn: text thành ext hoặc text thành
txt.
3. Thêm một ký tự bất kỳ vào một vị trí bất kỳ, chẳng hạn SP thành
SP2.
Với hai xâu S1 và S2, ta nói khoảng cách từ xâu S1 đến xâu S2 bằng
số lợng ít nhất các phép biến đổi thuộc 3 cách trên mà khi áp dụng
liên tiếp vào S1, ta sẽ nhận đợc xâu S2.
Dữ liệu vào: Đọc từ file văn bản Kcxau.inp gồm 2 dòng, dòng 1 là xâu
S1, dòng 2 là xâu S2 (các xâu S1, S2 có độ dài không quá 100 ký tự)
Dữ liệu ra: Ghi ra file văn bản Kcxau.out nh sau:
- Dòng đầu tiên ghi số N là khoảng cách từ S1 đến S2.

- Các dòng tiếp theo, mỗi dòng ghi một phép biến đổi theo thứ tự
để từ xâu S1, có đợc xâu S2.
Ví dụ:


Kcxau.inp

1A3BC
13Ab
Kcxau.out
3
1A3BC – Thay C/5/b => 1A3Bb
1A3Bb – Thay B/4/A => 1A3Ab
1A3Ab – Xoa A/2 => 13Ab
\\\\\\\\\\\\\\\\\\



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×