Tải bản đầy đủ (.docx) (72 trang)

BTPASCAL dành cho HSG HAY MOI

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 (789.43 KB, 72 trang )

Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

MỤC LỤC
Bài 1. NÉN & GIẢI NÉN....................................................................................................................................1
BÀI 2. TÌM DÃY CHỮ SỐ LỚN VÀ NHỎ:.......................................................................................................2
Bài 3. SỐ KHƠNG CĨ TRONG DÃY..............................................................................................................5
BÀI 4. RÚT GỌN XÂU.......................................................................................................................................7
BÀI 5: TÌM SỐ NGUYÊN TỐ KÉP:................................................................................................................8
BÀI 6. CHIẾC NÓN KỲ DIỆU..........................................................................................................................9
Bài 7. DÃY CON DÀI NHẤT..........................................................................................................................11
Bài 8. ĐÓNG GÓI SẢN PHẨM ..............................................................................................................12
BÀI 9: ĐỒNG HỒ CLOCK..............................................................................................................................14
Bài 10. XẾP GẠCH...........................................................................................................................................15
BÀI 11: ĐÀO HẦM................................................................................................................................................17
BÀI 12: IN HÌNH XOÁY ỐC............................................................................................................................19
BÀI 13. TỔNG BÉ NHẤT................................................................................................................................20
BÀI 14. IN NGUYÊN TỐ TRONG DÃY........................................................................................................21
BÀI 15. NHẬN DẠNG ĐỘ TUỔI.....................................................................................................................23
BÀI 16. TÍCH LỚN NHẤT TICHMAX.........................................................................................................25
BÀI 17. TẠO MẢNG THEO CƠNG THỨC..................................................................................................26
BÀI 18. TÌM PHẦN TỬ TRONG MẢNG......................................................................................................27
BÀI 19. ĐẾM TỔNG.........................................................................................................................................29
BÀI 20. SINH MẢNG NGẪU NHIÊN:..........................................................................................................30
B ài 21. CỜ TỔ QUỐC...............................................................................................................................32
BÀI 22. CÁCH CHIA NHĨM........................................................................................................................35
BÀI 23. DÃ NGOẠI...........................................................................................................................................37
BÀI 24. TÌM MẬT KHẨU...............................................................................................................................40


BÀI 25. SỐ SIÊU NGUYÊN TỐ......................................................................................................................42
BÀI 26. TÌM NGUYÊN TỐ TRONG DÃY....................................................................................................44
BÀI 27. SỐ NGUYÊN TỐ TƯƠNG ĐƯƠNG................................................................................................45
BÀI 28. TRÂU ĂN CỎ......................................................................................................................................47
BÀI 29. TOÁN CỔ.............................................................................................................................................48
BÀI 30. VÉ XE HẠNH PHÚC:.......................................................................................................................49
BÀI 31. XE ĐIỆN TRAM 116A.......................................................................................................................50
Bài 32. CẮT CÂY – TREES.............................................................................................................................51
Bài 33. ƯỚC NGUYÊN TỐ – PRIME............................................................................................................53


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

Bài 34. CHỌN THU ĐÔ – BITLAND.............................................................................................................55
BÀI 35 . MÃ VẠCH EAN-13...........................................................................................................................57
BÀI 36 . THỐNG KÊ........................................................................................................................................59
BÀI 37 . PHẦN TỬ YÊN NGỰA.....................................................................................................................61
BÀI 38 . NHẬP BẢNG MATRAN...................................................................................................................63
Bài 39 . CỨU CHUỐI........................................................................................................................................65
Bài 40 . TÍNH TIỀN PHOTO...........................................................................................................................66
Bài 40 . TÌM MẬT KHẨU................................................................................................................................67


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn


THCS Vĩnh Tân

Bài 1. NÉN & GIẢI NÉN
Một xâu kí tự có thể "nén" theo cách sau: Một xâu con gồm n>1 kí tự giống
nhau, chẳng hạn gồm n kí tự "a" sẽ đợc ghi thành na. Ví dụ xâu 'aaaabbcd' sẽ đợc nén
thành 4a2bcd. Hãy viết chương trình nén và giải nén. (Chú ý trong các xâu đợc nén
phải khơng có chữ số).
Dữ liệu vào: Cho trong tệp string.INP
Kết quả: Ghi vào tệp String.Out
string.inp
aaaabbcd
3a2b

string.out
4a2bcd
Aaabb

Đáp án.
const fi='giainen.inp';
fo='giainen.out';
var s1,s2,kq1,kq2:string;
procedure nhap;
begin
assign(input,fi);reset(input);
readln(input,s1);
readln(s2);
close(input);
end;
procedure nen(s:string);

var i,j,d:integer;
k:string;
begin
i:=1;
kq1:='';
repeat
d:=0;
while s1[i]=s[i+1] do
begin
inc(d);
inc(i);
end;
if d>0 then
begin
Page 1


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

str(d+1,k);
kq1:=kq1+k+s1[i];
end
else kq1:=kq1+s1[i];
inc(i);
until i>length(s1);
end;
procedure giainen(s:string);
var so:string;

i,j,n:integer;
begin
i:=1;
kq2:='';
repeat
so:='0';
while s2[i] in ['1'..'9'] do
begin
so:=so+s2[i];
inc(i);
end;
val(so,n);
if n>1 then
for j:=1 to n do kq2:=kq2+s2[i]
else kq2:=kq2+s2[i];
inc(i);
until i>length(s2);
end;
begin
assign(output,fo);rewrite(output);
nhap;
nen(s1);
writeln(output,kq1);
giainen(s2);
writeln(output,kq2);
close(output);
end.
BÀI 2. TÌM DÃY CHỮ SỐ LỚN VÀ NHỎ:
Page 2


THCS Vĩnh Tân


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

Trong buổi học pascal bạn An đố bạn Mai “Cho một xâu chỉ gồm các ký tự chữ
cái thường trong bảng chữ cái tiếng anh và các chữ số từ 0 đến 9. Đoạn các ký tự số
liên tiếp tạo thành một số nguyên. Ở mỗi đoạn ký tự số liên tiếp phải trích ra số lớn
nhất và số nhỏ nhất có thể, mỗi số lấy ra khơng có các số 0 đứng đầu. Ví dụ, với xâu
là 05aab21bc3956cde488a các số được trích ra là 5, 21, 3956, 488”. Em hãy giúp bạn
mai thực hiện bài toán trên.
Yêu cầu: Cho xâu S có độ dài khơng q 100.000 kí tự chỉ gồm các kí tự chữ
cái thường và chữ số (khơng có dấu cách). Hãy viết chương trình tìm số bé nhất và
lớn nhất trong các số được trích ra?
Dữ liệu vào: Cho trong tệp văn bản Cau4.INP gồm một xâu S chỉ chứa các ký
tự chữ cái thường và chữ số.
Dữ liệu ra: Đưa ra tệp văn bản Cau4.OUT
+ Dịng 1 đưa ra số bé nhất tìm được.
+ Dịng 2 đưa ra số lớn nhất tìm được.
Ví dụ:

Cau4.INP
05aab21bc3956cde488a

Cau4.OUT
5

3956

Đáp án:
const fi='chuoicon.inp';
fo='chuoicon.out';
var s:string;
procedure nhap;
begin
assign(input,fi);reset(input);
readln(input,s);
close(input);
end;
procedure xuly;
var max,min,i,n,nn:integer;
ss,m,mx:string;
begin
assign(output,fo);rewrite(output);
max:=0;
min:=32000;
Page 3


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

i:=1;
repeat
ss:='';
while s[i] in ['0'..'9'] do

begin
ss:=ss+s[i];
inc(i);
end;
val(ss,n,nn);
if nn=0 then
begin
if maxif min>n then min:=n;
end;
inc(i);
until i>length(s);
writeln(output,min);
writeln(output,max);
close(output);
end;
begin
nhap;
xuly;
end.
Cách khác:
const fi='cau4.INP'; fo='cau4.OUT';
var f,g:text;
function ss(x,y:ansistring):boolean;
begin
if length(x)=length(y) then ss:=x>y
else
if length(x)>length(y) then ss:=true
else ss:=false;
end;

Procedure xuly;
var s,x,minx,maxx:ansistring;
i:longint;
begin
Page 4

THCS Vĩnh Tân


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

assign(f,fi); reset(f);
readln(f,s);
assign(g,fo);rewrite(g);
s:=s+'a';
maxx:='0';
x:='';
minx:='';
for i:=1 to 100000 do minx:='9'+minx;
for i:=1 to length(s) do
if s[i] in ['0'..'9'] then x:=x+s[i]
else
if x<>'' then
begin
While (length(x)>1) and (x[1]='0') do delete(x,1,1);
if ss(minx,x) then minx:=x;

if ss(x,maxx) then maxx:=x;
x:='';
end;
writeln(g,minx);
writeln(g,maxx);
close(f); close(g);
end;
begin
xuly;
end.
Bài 3. SỐ KHƠNG CĨ TRONG DÃY
Cho dãy số ngun. Gọi max, min lần lượt là các giá trị lớn nhất, nhỏ nhất của
dãy số nguyên. Hãy đưa ra các số nguyên theo thứ tự tăng dần thuộc đoạn [min,max]
mà không xuất hiện trong dãy.
Dữ liệu vào: Cho trong file minmax.INP gồm 2 dòng.
- Dòng 1: Số phần tử của dãy n.
- Dịng 2: Dãy số ngun, giữa các số có 1 khoảng trắng.
Kết quả: Ghi ra file minmax.OUT, 1 dòng duy nhất là dãy tìm được.
Ví dụ:
Minmax.INP
5

Minmax.OUT
2478

Page 5


Bài tập Pascal hay


Sưu tầm GV Đỗ Văn Tuấn

91536
Đáp án
const fi='minmax.INP'; fo='minmax.OUT';
type mang=array[1..100] of integer;
var a:mang;
n,max,min:integer;
{----Thu tuc nhap mang---------------------------------}
procedure nhap;
var i:integer;
begin
assign(input,fi);reset(input);
readln(input,n);
for i:=1 to n do read(input,a[i]);
close(input);
end;
{--------------ham kt phan tu co trong mang ko------------}
function kt(a:mang;x:integer):boolean;
var i:integer;
begin
kt:=false;
for i:=1 to n do
if (a[i]=x) then exit;
kt:=true;
end;
{------------Thu tuc xu ly------------------------------------}
procedure xuly;
var i,j:integer;
begin

assign(output,fo);rewrite(output);
max:=a[1];
min:=a[1];
for i:=2 to n do
begin
if (a[i]>max) then max:=a[i];
if (a[i]end;
j:=min+1;
while jPage 6

THCS Vĩnh Tân


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

begin
if kt(a,j) then write(output,' ',j);
inc(j);
end;
close(output);
end;
{------------------------------CTC---------------------------}
begin
nhap;

xuly
end.
BÀI 4. RÚT GỌN XÂU
(Đề thi HSG lớp 12 tỉnh Nghệ An năm 2009-2010).
Cho một xâu S chỉ gồm các chữ cái in thường với độ dài tối đa 250 ký tự. Em
hãy viết chương trình để tạo ra xâu SG từ xâu S bằng cách xóa các ký tự liên tiếp
giống nhau trong xâu S và chỉ để lại một kí tự đại diện trong đoạn đó.
Dữ liệu vào: Đọc từ file văn bản XAUGON.INP chứa xâu S chỉ gồm các chữ
cái in thường.
Kết quả: Ghi ra file văn bản XAUGON.OUT là xâu SG tìm được.
Ví dụ:
XAUGON.INP
Hhooocccsssiiiiinnnhhh
Đáp án:
const fi='xau.inp';
fo='xau.out';
type xau=string;
var s:xau;
i:integer;
begin
assign(input,fi);reset(input);
read(input,s);
assign(output,fo);rewrite(output);
i:=1;
while i< length(s) do
begin
if s[i]=s[i+1] then delete(s,i,1)
Page 7

XAUGON.OUT

hocsinh


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

else inc(i);
end;
writeln(output,s);
close(input);close(output);
end.
BÀI 5: TÌM SỐ NGUYÊN TỐ KÉP:
Số nguyên dương N được gọi là số nguyên tố kép nếu N có thể biểu diễn dưới
dạng tích của hai số ngun tố khác khau. Ví dụ 35 là nguyên tố kép vì 35= 5.7, trong
đó 5 và 7 là hai số nguyên tố khác nhau.
Yêu cầu: Hãy xác định số nguyên tố kép N lớn nhất không vươt quá giá trị
nguyên dương M cho trước.
Dữ liệu vào: Cho trong tệp văn bản Cau3.INP chỉ chứa số nguyên dương M
(6≤M≤109).
Dữ liệu ra: Ghi vào tệp văn bản Cau3.OUT giá trị N tìm được.
Ví dụ:

Cau3.INP
36

Cau3.OUT
35


Đáp án:
const
fi='cau3.INP';
fo='cau3.OUT';
var
f,g:text;
function ktto(x:longint):boolean;
var j:longint;
begin
ktto:=false;
if x<2 then exit;
for j:=2 to trunc(sqrt(x)) do
if (x mod j=0) then exit;
ktto:=true;
end;
function ktunt(y:longint):boolean;
var j:longint;
begin
ktunt:=false;
for j:=2 to y do
if (y mod j=0) and ktto(j) and ktto(y div j) and (j<>y div j)then
Page 8


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân


begin
ktunt:=true;
exit;
end;
end;
procedure xuly;
var i,m:longint;
begin
assign(f,fi); reset(f);
readln(f,m);
assign(g,fo); rewrite(g);
for i:= m downto 2 do
if ktunt(i) then break;
writeln(g,i);
close(f); close(g);
end;
begin
xuly;
end.
BÀI 6. CHIẾC NÓN KỲ DIỆU
(Đề thi học sinh giỏi lớp 12 tỉnh Phú Yên năm học 2009-2010)
Một lần trong chương trình “Chiếc nón diệu kỳ”, ở phần chơi dành cho khán giả,
thay vì đốn chữ như mọi khi, người dẫn chương trình tự mình quay “chiếc nón” và
cho hiện lên màn hình trước mặt khán giả trong trường quay các số trong các ô mà
kim chỉ thị lần lượt đi qua. “Chiếc nón” quay đúng một số ngun vịng, nên trong
dãy số hiện lên màn hình, số cuối cùng trùng với số đầu tiên. Sau đó, người dẫn
chương trình mời một khán giả ở cuối trường quay (chỉ nhìn thấy màn hình mà khơng
nhìn thấy “chiếc nón”) cho biết chiếc nón có tối thiểu bao nhiêu ô?
Yêu cầu: Hãy trả lời câu hỏi của người dẫn chương trình.

Dữ liệu: Vào từ tập tin văn bản ‘chiecnon.INP’ gồm hai dòng:
+ Dòng 1 ghi số N là số lượng số đã hiện lên màn hình, (2 ≤ N≤100).
+ Dịng 2 ghi lần lượt N số, mỗi số có giá trị không quá 32000.
Kết quả: Ghi ra tập tin văn bản ‘chiecnon.OUT’ số ơ tối thiểu của “chiếc nón”.
Lưu ý: Các số trên cùng một dịng cách nhau ít nhất một khoảng trắng.
Page 9


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

Ví dụ:
chiecnon.INP

chiecnon.OUT

15

7

624361562436156
* Ý tưởng: Nhận thấy nếu ghép tồn bộ các số hiện lên màn hình (trừ số cuối
cùng) vào một xâu S thì trong xâu S sẽ ln tồn tại một xâu s1 dài nhất mà khi ghép
liên tiếp một số lần xâu s1 ta sẽ được xâu s. Số lần xuất hiện xâu s1 là kết quả cần
tìm. Bài tốn trở thành tìm xâu con dài nhất s1.
* Chương trình tham khảo:
const fi='chiecnon.inp';fo='chiecnon.out';

type xau=ansistring;
var s,s1,s2:xau;
n:integer;
procedure nhap;
var i,x:integer;
begin
assign(input,fi);reset(input);
readln(input,n);
readln(input,s);
close(input);
end;
procedure xuly;
var i,dem,x:integer;
begin
assign(output,fo);rewrite(output);
delete(s,length(s),1);
dem:=0;
for i:=1 to length(s) do
begin
s1:=s;
s2:=copy(s1,1,i);
while (pos(s2,s1)<>0) and (length(s1)<>0) do delete(s1,1,i);
if (length(s1)=0) and (i>1) then
begin
dem:=i;
break;
end;
end;
Page 10



Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

writeln(output,dem);
close(output);
end;
begin
nhap;
xuly;
end.
Bài 7. DÃY CON DÀI NHẤT
Cho một mảng số nguyên gồm n phần tử. Tìm dãy con gồm m phần tử (mn) sao cho
dãy con này có tổng lớn nhất. (Dãy con phải là dãy các phần tử liên tiếp nhau trong mảng).
Dữ liệu vào: Cho trong file DAYCON.INP gồm 3 dòng:
- Dòng 1: Là n (số phần tử của dãy).
- Dòng 2: Gồm n phần tử của dãy (các phần tử cách nhau bưởi 1 dấu cách.
- Dòng 3: Là m (Số phần tử của dãy con, m≤n).
Kết quả: Trong file DAYCON.OUT là dãy con
DAYCON.OUT

DAYCON.OUT

8
43528796
3


879

Chương trình tham khảo:
const fi='DAYCON.INP'; fo='DAYCON.OUT';
type mang=array[1..100] of integer;
var
a:mang;
n,m:integer;
{------------------------------nhap---------------------------------------------}
procedure nhap;
var i:integer;
begin
assign(input,fi);reset(input);
readln(input,n);
for i:=1 to n do read(input,a[i]);
readln(input);
readln(input,m);
close(input);
end;
{--------------------------------------xß+¡ l++-----------------------------------------}
Page 11


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

procedure xuly;

var max,i,j,vitri,t:integer;
s:longint;
begin
max:=a[1];
for i:=1 to n-m+1 do
begin
s:=0;
j:=i;
t:=1;
while (t<=m) and (j<=n) do
begin
s:=s+a[j];
inc(j);
inc(t);
end;
if s>max then
begin
max:=s;
vitri:=i;
end;
end;
assign(output,fo); rewrite(output);
for i:=vitri to vitri+m-1 do write(output,' ',a[i]);
close(output);
end;
{------------------------------------CTC-----------------------------------------------}
begin
nhap;
xuly;
end.

Bài 8. ĐÓNG GÓI SẢN PHẨM
Một nhà máy xay xát cần đóng gói gạo vào các loại bao 100 kg, 50 kg, 20 kg, 10
kg, 5 kg. Với mỗi 1oại bao chỉ được đóng gói khi đủ số lượng quy định cho 1oại bao
đó. Tuy nhiên cơng ty sản xuất các loại bao thì cung cấp số lượng bao theo từng đợt
với số lượng từng loại khác nhau.
Page 12


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

Yêu cầu: Với khối lượng gạo va số lượng bao của từng loại cho trước, hãy tìm
một phương án đóng gói sao cho số lượng gạo thừa khơng được đóng gói (nếu có) là
ít nhất.
Dữ liệu vào: Trong file DONGGOI.INP gồm 2 dòng.
- Dòng đầu ghi số lượng gạo N cần phải đóng gói (0 < N < 1000000).
- Dịng thứ hai ghi 5 số tự nhiên cho biết số lượng bao của từng loại theo thứ tự
100kg, 50kg, 20kg, 10kg, 5kg
Kết quả: Trong file DONGGOI.OUT gồm 2 dòng.
- Dòng đầu ghi số gạo thừa khơng được đóng gói.
- Dịng thứ hai ghi 5 so nguyên tương ứng là số lượng bao đã xử dụng.
DONGGOI.OUT

DONGGOI.INP

1000
5 0 20 30 45

950
10 0 20 0 0

0
5 0 20 10 0
10
9 0 2 0 0

Tham khảo:
const fi='DONGGOI.INP'; fo='DONGGOI.OUT';
var a,b,c:array[1..5] of longint;
n:longint;
procedure nhap;
var i:longint;
begin
assign(input,fi);reset(input);
readln(input,n);
for i:=1 to 5 do read(input,a[i]);
c[1]:=100;
c[2]:=50;
c[3]:=20;
c[4]:=10;
c[5]:=5;
close(input);
end;
procedure xuly;
var i,j,s,dem:longint;
Page 13



Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

begin
assign(output,fo);rewrite(output);
for i:=1 to 5 do
if ((a[i]<>0) and (n>=0)) then
begin
s:=0;
j:=1;
dem:=0;
while (s<=n)and (j<=a[i]) and (j*c[i]<=n) do
begin
s:=j*c[i];
if ((j+1)*c[i]>n) or (j=a[i]) then dem:=j;
inc(j);
end;
b[i]:=dem;
n:=n-s;
end
else b[i]:=0;
writeln(output,n);
for i:=1 to 5 do write(output,' ',b[i]);
close(output);
end;
begin
nhap;

xuly;
end.
BÀI 9: ĐỒNG HỒ CLOCK
(HSG huyện Vĩnh Cửu 2018-2019)

Bảng của đồng hồ điện tử gồm 1 dãy 3 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 sẽ đổi
thành 3 số h1, p1 và s1 ứng với thời điểm mới.
Yêu cầu: Cho 3 số h, p và s hãy tìm 3 số h1, p1 và s1.
Page 14


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

Dữ liệu vào: Gồm 1 dòng chứa 3 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.
INPUT

OUTPUT

8 30 0

8 30 1

Tham khảo:

const fi='dongho.inp'; fo='dongho.out';
var h,p,s:integer;
begin
assign(input,fi);reset(input);
readln(input,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 h:=0;
assign(output,fo);rewrite(output);
write(h,' ',p,' ',s);
close(input); close(output);
end.
Bài 10. XẾP GẠCH
(HSG huyện Vĩnh Cửu 2018-2019)
Minh rất thích trị chơi xếp các chiếc hộp có hình viên gạch. Minh đặt các viên
gạch chồng lên nhau và xây thành nhiều chồng có độ cao khác nhau. Minh khoe với
chị rằng “Chị trông, em đã xây được một bức tường”. Chị của Minh trả lời “Em phải
xếp các viên gạch có độ cao giống nhau mới được gọi là một bức tường”. Sau khi
nghe chị nói như vậy nó cân nhắc một tí và cho rằng ý kiến ấy là đúng. Vì vậy em bắt
đầu tiến hành sắp xếp lại các chồng gạch lần lượt từng chiếc một cho đến khi hoàn
Page 15



Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

thành cơng việc. Khi cơng việc đã hồn tất, Minh mệt lả và muốn có bạn nào giúp
Minh di chuyển các viên gạch với số lần ít nhất.

Yêu cầu: Hãy lập trình đưa ra số lần di chuyển ít nhất của các viên gạch sao cho
từ các chồng gạch có độ cao khác nhau trở thành các chồng gạch có độ cao bằng
nhau; lần lượt từng chiếc một cho đến khi hồn thành cơng việc.
Dữ liệu vào: Có cấu trúc sau:
- dòng đầu tiên là số n, n là số các chồng gạch,
- dòng tiếp theo lần lượt là các hi, độ cao của chồng gạch thứ i. (1≤ n ≤ 50; 1≤
hi ≤ 100; i = 1..n). Lưu ý rằng số viên gạch bao giờ cũng chia hết cho số
chồng gạch.
Dữ liệu ra: Chỉ có một dịng chứa một số ngun dương là kết quả tính tốn số
lần ít nhất sau khi xếp lại các chồng gạch. Nếu không có kết quả cũng phải ghi rõ
“KHONG CAN DI CHUYEN LAN NAO”
Ví dụ: với hình trên ta có dữ liệu vào, ra:
Xepgach.inp

Xepgach.out

6
5 2 4 1 7 5
7

9999999

5
Khong can di chuyen lan nao

Tham khảo:
const fi='xepgach.inp'; fo='xepgach.out';
var a:array[1..500] of integer;
n:integer;
procedure nhap;
var i:integer;
begin
assign(input,fi);reset(input);
readln(input,n);
for i:=1 to n do read(input,a[i]);
close(input);
Page 16


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

end;
procedure xuly;
var i,dem,s:integer;
tb:real;
begin

assign(output,fo); rewrite(output);
s:=0;
for i:=1 to n do s:=s+a[i];
tb:=s/n;
dem:=0;
for i:=1 to n do
if a[i]<>tb then inc(dem);
if dem<>0 then writeln(output,dem)
else writeln(output,'KHONG CAN DI CHUYEN LAN NAO');
close(output);
end;
begin
nhap;
xuly;
end.
BÀI 11: ĐÀO HẦM
(Thi HSG huyện Vĩnh Cửu năm 2018-2019).
Một Robot đào hầm được điều khiển bởi 2 lệnh là:
 Lệnh C1 đào 1 đơn vị độ dài thì tốn 2 đơn vị năng lượng.
 Lệnh N2 đào gấp đôi đơn vị độ dài đã đào được trước đó và tiêu tốn hết
4 đơn vị năng lượng.
Với k đơn vị độ dài cần đào, hãy lập trình điều khiển qui trình đào hầm cho
robot bằng các lệnh ở trên và tìm số đơn vị năng lượng đã sử dụng sao cho số lệnh
sử dụng là ít nhất và năng lượng bị tiêu hao ít nhất. Biết ban đầu ln có 1 đơn vị độ
dài đã được đào sẵn.
Dữ liệu vào: Chứa duy nhất một số k cho biết đơn vị độ dài hầm cần đào.
Kết quả: Gồm 2 dòng:
+ Dòng đầu ghi số đơn vị năng lượng đã sử dụng.
+ Dịng thứ hai ghi quy trình sử dụng các lệnh, mỗi lệnh cách nhau 1
khoảng trắng.

Ví dụ:
Input

Outpu
Page 17


Bài tập Pascal hay

10
21
53

999

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

12
C1 N2 C1 N2
18
C1 N2 C1 N2 N2 C1
24
C1 C1 N2 N2 C1 N2 N2 C1
48
C1 C1 N2 C1 N2 C1 N2 C1 N2 N2 N2 C1 N2 C1 N2 C1

Thao khảo:
const fi='daohammoi2.inp'; fo='daohammoi2.out';

var k:word;
procedure nhap;
begin
assign(input,fi); reset(input);
readln(input,k);
close(input);
end;
procedure xuly;
var a:array[1..100] of integer;
d,i,t: word;
begin
assign(output,fo); rewrite(output);
d:= 0;
repeat
inc(d);
if(k mod 2 <>0) then
begin
a[d]:= 2;
dec(k) //giam k 1 don vi
end
else
begin
a[d]:= 4;
k:= k div 2
end;
until k=2;
inc(d);
a[d]:= 2;
t:= 0;
for i:= 1 to d do t:= t+a[i];

writeln(t:3);
Page 18


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

for i:=d downto 1 do
if a[i]=2 then write('C1':3)
else write(' N2':3);
close(output);
end;
begin
nhap;
xuly;
end.
BÀI 12: IN HÌNH XỐY ỐC
(chỉnh lại)
Viết chương trình in ra các số nguyên từ 1 đến N2 theo hình xoắn ốc với N được
nhập vào từ bàn phím. Ví dụ, với N=5 ta có:
1
2
3
4
5
16
17

18
19
6
15
24
25
20
7
14
23
22
21
8
13
12
11
10
9
Tham khảo:
const fi='inxoanoc.inp'; fo='inxoanoc.out';
var a:array[1..150,1..150]of word;
i,j,n,k:longint;
procedure inmt; {in ma trận}
begin
assign(output,fo);rewrite(output);
for j:=1 to n do
begin
for i:=1 to n do write(output,a[i,j]:4);
writeln(output);
end;

close(output)
end;
procedure chon; {chọn số vào ô}
begin
inc(k);
a[i,j]:=k;
end;
begin
Page 19


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

assign(input,fi);reset(input);
readln(input,n);
j:=1;
while kbegin
for i:=j to n+1-j do chon; {sang phải}
for j:=n+2-i to i do chon; {xuống đươi}
for i:=j-1 downto n+1-j do chon; {sang trái}
for j:=n-i downto i+1 do chon; {lên trên}
end;
inmt;
close(input);
end.

BÀI 13. TỔNG BÉ NHẤT
Cho dãy số nguyên a = (a1, a2, ... , an),
Yêu cầu tìm 2 số nguyên liên tiếp trong dãy a: ai, ai+1 có giá trị tuyệt đối của tổng
là bé nhất.
Dữ liệu vào: gồm 2 dòng

Dòng 1: Chứa số nguyên N (2 ≤ n ≤ 10000)

Dòng 2: Chứa n số a1, a2, ... , an theo đúng thứ tự
cách nhau một dấu cách (|ai| ≤ 10000).
Dữ liệu ra:

Dịng 1: Ghi tổng tìm được

Dịng 2: Ghi hai vị trí i và i+1 nhỏ nhất.
Tham khảo:
const fi='tongbe.inp'; fo='tongbe.out';
var a:array[1..1000] of integer;
n:integer;
procedure nhap;
var i:integer;
begin
assign(input,fi);reset(input);
readln(input,n);
for i:=1 to n do read(input,a[i]);
close(input);
end;
Page 20

Ví dụ

Input
Output
5
1
2 3 9 -2 3 4 5


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

procedure xuly;
var i,s,vitri:integer;
begin
assign(output,fo); rewrite(output);
vitri:=0;
s:=abs(a[1]+a[2]);
for i:=1 to n-1 do
if (abs(a[i]+a[i+1])<=s) then
begin
s:=abs(a[i]+a[i+1]);
vitri:=i;
end;
writeln(output,s);
writeln(vitri,' ',vitri+1);
close(output);
end;
begin

nhap;
xuly;
end.
BÀI 14. IN NGUYÊN TỐ TRONG DÃY
Cho dãy gồm n số nguyên dương (mỗi số cách nhau 1 khoảng cách). Tìm và in
những phần tử của dãy là số nguyên tố (mỗi số nguyên tố chỉ in một lần)
Dữ liệu vào: Cho trong file NGTODAY.INP gồm 2 dòng:
 Dòng 1: Số n – số phần tử của dãy (2≤ n ≤ 10000).
 Dòng 2: Gồm n phần tử của dãy (mỗi phần tử nguyên dương và ≤ 10000).
Kết quả: Cho trong file NGTODAY.OUT là dãy các số nguyên tố (mỗi số cách
nhau 1 khoảng cách, mỗi số nguyên tố in một lần).
Tham khảo:
const fi='ngtoday.inp'; fo='ngtoday.out';
var a:array[1..10000] of integer;
n:integer;
function ktnt(k:integer):boolean;
var i:integer;
begin
Page 21


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

ktnt:=false;
if k<2 then exit;
if k=2 then

begin
ktnt:=true;
exit;
end;
for i:=2 to trunc(sqrt(k)) do
if k mod i=0 then exit;
ktnt:=true;
end;
procedure nhap;
var i:integer;
begin
assign(input,fi); reset(input);
readln(input,n);
for i:=1 to n do read(input,a[i]);
close(input);
end;
procedure xuly;
var i,j,x:integer;
begin
assign(output,fo); rewrite(output);
//sắp xếp mảng tăng dần.
for i:=1 to n-1 do
for j:=i to n do
if a[i]>a[j] then
begin
x:=a[i];
a[i]:=a[j];
a[j]:=x;
end;
for i:=1 to n do

if (a[i]<>a[i+1]) and (ktnt(a[i])) then write(output,a[i]:3);
close(output);
end;
begin
nhap;
xuly;
Page 22


Bài tập Pascal hay

Sưu tầm GV Đỗ Văn Tuấn

THCS Vĩnh Tân

end.
BÀI 15. NHẬN DẠNG ĐỘ TUỔI
Đề thi HSG 12 tỉnh Đồng Nai năm 2011 – Vòng 1

Trong sân bay vừa mới lắp đặt thiết bị nhận dạng độ tuổi của khách. Thiết bị có
khả năng nhận dạng, phân loại độ tuổi từ trẻ mới sinh đến người già thành k loại, số
loại không quá 100, các loại được đánh số từ 1 đến k. Hằng ngày, thiết bị nhận dạng
ghi nhận N khách, khi một khách đi qua, thiết bị nhận dạng và ghi lại số loại tuổi của
khách.
Yêu cầu: Hãy cho biết số lần ghi nhận liên tiếp nhiều nhất của cùng một loại
tuổi.
Dữ liệu vào:

Ví dụ


Gồm N dịng tiếp theo, mỗi dòng
chứa một số nguyên, số của loại tuổi
theo thứ tự nhận dạng được.
Kết quả Số lượng lớn nhất của
cùng một loại tuổi liên tiếp nhận được.

Tham khảo:
const fi='dotuoi.inp'; fo='dotuoi.out';
var a:array[1..100] of byte;
n:byte;
procedure nhap;
Page 23

Input
10
1
4
5
5
5
8
4
5
2

Output
3



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

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