Professional Documents
Culture Documents
MẬT KHẨU.
Cu Tí thường xuyên tham gia thi lập trình trên mạng. Vì đạt được thành tích cao nên Tí được gửi tặng
một phần mềm diệt virus. Nhà sản xuất phần mềm cung cấp cho Tí một mã số là một dãy gồm các bộ ba chữ
số ngăn cách nhau bởi dấu chấm và có chiều dài không quá 255 (kể cả chữ số và dấu chấm). Để cài đặt được
phần mềm, Tí phải nhập vào mật khẩu của phần mềm. Mật khẩu là một số nguyên dương M được tạo ra bằng
cách tính tổng giá trị các bộ ba chữ số trong dãy mã số, các bộ ba này được đọc từ phải sang trái.
- Yêu cầu: Cho biết mã số của phần mềm, hãy tìm mật khẩu của phần mềm đó.
- Dữ liệu vào: Cho từ tệp văn bản có tên BL2.INPgồm một dòng chứa xâu ký tự S (độ dài xâu không
quá 255 ký tự) là mã số của phần mềm.
- Kết quả: Ghi ra tệp văn bản có tên BL2.OUTgồm một số nguyên là mật khẩu tìm
được.
ProgramBL2;
Constfin ='BL2.INP';
fout='BL2.OUT';
VarS:String;
i,Sum,T:Longint;
f:Text;
Begin
Assign(f,fin);
Reset(f);
Read(f,S);
Close(f);
Sum:=0;
T:=0;
Fori:=Length(S) downto1 do
Else
Begin
Sum:=Sum+T;
T:=0;
End;
Sum:=Sum+T;
Assign(f,fout);
ReWrite(f);
Write(f,Sum);
Close(f);
End.
- Yêu cầu: Hãy cắt cuộn giấy thành nhiều đoạn nhất sao cho tổng các số được viết trong các đoạn là
bằng nhau.
- Dữ liệu vào: Cho từ tệp văn bản có tên BL3.INPcó dạng như sau:
Dòng thứ hai ghi N số nguyên theo thứ tự là các số được viết trên cuộn giấy, các số nguyên cách
nhau ít nhất một dấu cách.
- Kết quả: Ghi ra tệp văn bản có tên BL3.OUTgồm một dòng ghi một số nguyên là số đoạn nhiều nhất
có thể chia được.
Ví dụ:
BL3.INP BL3.OUT
8 3
10 2 6 2 5 2 1 2
Giải thích:
+ Đoạn 1: 10
+ Đoạn 2: 2 + 6 + 2 =10
+ Đoạn 3: 5 + 2 + 1 + 2 = 10
Chương trình tham khảo:
ProgramBL3;
Constfin ='BL3.INP';
fout='BL3.OUT';
Vara:array[1..1000] ofLongint;
N,K,i,S,tong:Longint;
f:Text;
Begin
Assign(f,fin);
Reset(f);
Readln(f,N);
Close(f);
S:=0;
ForK:=N downto1 do
Begin
tong:=0;
Fori:=1 ton do
Begin
tong:=tong+a[i];
End;
Iftong=0 thenBreak;
End;
Assign(f,fout);
ReWrite(f);
Write(f,K);
Close(f);
End.
KHOẢNG CÁCH
Trong soạn thảo văn bản, theo quy ước giữa các từ chỉ nên cách nhau bằng một khoảng cách. Tuy
nhiên trên thực tế vẫn có những trường hợp ngoại lệ.
- Yêu cầu: Cho trước một xâu ký tự S chỉ gồm các chữ cái và các khoảng cách. Hãy cho biết có nhiều
nhất bao nhiêu khoảng cách đi liền nhau trong xâu S.
- Dữ liệu vào: Cho từ tệp văn bản có tên BL3.INPgồm một dòng ghi xâu S (độ dài xâu không quá 250
ký tự).
- Ghi ra tệp văn bản có tên BL3.OUTgồm một số nguyên duy nhất là số
Kết quả:
khoảng cách nhiều nhất đi liền nhau.
Program BL3;
fout='BL3.OUT';
Var S:String;
i,d,max:Integer;
f:Text;
Begin
Assign(f,fin);
Reset(f);
Read(f,S);
Close(f);
max:=0;
d:=0;
S:=S+'a';
Else
Begin
d:=0;
End;
Assign(f,fout);
ReWrite(f);
Write(f,max);
Close(f);
End.
DÃY TĂNG
Một dãy số a1, a2, …, anđược gọi là dãy tăng nếu như nó thỏa điều kiện:
- Yêu cầu: Cho dãy số nguyên a1, a2, …, an. Hãy cho biết dãy số này có phải là dãy tăng hay không?
Nếu không phải dãy tăng thì hãy cho biết chỉ số k nhỏ nhất của phần tử làm cho dãy không có tính chất
của dãy tăng.
- Dữ liệu vào: Cho từ tệp văn bản có tên BL4.INPcó dạng như sau:
Dòng thứ hai ghi dãy n số nguyên a1, a2, …, an(-1000 ≤ ai≤ 1000, i=1..n)
- Kết quả: Ghi ra tệp văn bản có tên BL4.OUTgồm một số nguyên duy nhất k.
Program BL4;
fout='BL4.OUT';
n,i:Longint;
f:Text;
Begin
Assign(f,fin);
Reset(f);
Readln(f,n);
Close(f);
i:=1;
Assign(f,fout);
ReWrite(f);
If i<=n-1 then Write(f,i+1)
Else Write(f,0);
Close(f);
End.
NHỮNG SỐ NGUYÊN TỐ
Bạn Nam vừa được học về các số nguyên tố và bạn ấy rất thích vì những tính chất đặc biệt của nó. Ngay
cả trong giờ ra chơi, bạn Nam vẫn ở lại lớp và lấy giấy ra để tìm thêm những số nguyên tố mới. Tuy nhiên,
những người bạn tinh nghịch khi thấy Nam tìm ra được một số nguyên tố thì thay đổi số đó bằng cách lấy viết
ghi thêm vào sau số đó một hoặc nhiều chữ số nữa, có lần cũng không viết thêm gì cả.
- Yêu cầu: Hãy cho biết những số nguyên tố nào có thể là số mà bạn Nam
- Dữ liệu vào:Nhập từ bàn phím số nguyên dương n(20≤n≤2*1000000000000) là số sau khi các bạn
của Nam đã thay đổi.
- Kết quả ra:Xuất ra màn hình những số nguyên tố có thể là số mà bạn Nam tìm được lúc đầu.
Ví dụ :
3079
307
ProgramBL1;
Varn,i:Longint;
Begin
Readln(n);
Whilen>=2 do
Begin
i:=2;
Ifi>sqrt(n) thenWriteln(n);
n:=n div10;
End;
Readln;
End.
- Yêu cầu: Cho xâu ký tự S chỉ gồm các chữ cái in thường. Hãy cho biết có bao nhiêu xâu con có nhiều
hơn 1 ký tự của xâu S là đối xứng. Xâu con của xâu S là một dãy ký tự liên tiếp trong xâu S.
- Dữ liệu vào: Cho từ tệp văn bản có tên BL2.INPgồm một dòng chứa xâu ký tự S (độ dài xâu không
quá 250 ký tự).
- Kết quả:Ghi ra tệp văn bản có tên BL2.OUTgồm một số tự nhiên là số xâu con đối
xứng của xâu S.
ProgramBL2;
Constfin ='BL2.INP';
fout='BL2.OUT';
VarS:String;
i,j,k,dem:Longint;
f:Text;
Begin
Assign(f,fin);
Reset(f);
Read(f,S);
Close(f);
dem:=0;
Fori:=1 toLength(S)-1 do
Forj:=i+1 toLength(S) do
Begin
k:=(j-i-1) div2;
Ifk<0 thendem:=dem+1;
End;
Assign(f,fout);
ReWrite(f);
Write(f,dem);
Close(f);
End.
Yêu cầu:Hãy cho biết cần ít nhất bao nhiêu chuyến xe để vận chuyển hết
Dữ liệu vào:Cho từ tệp văn bản có tên BL3.INPcó dạng như sau:
- Dòng đầu tiên ghi hai số nguyên nvà M(1≤n≤10000, 1≤M≤10000000) tương ứng là số kiện hàng trên tàu và
tải trọng tối đa của xe container.
- Dòng thứ hai ghi n số nguyên a1, a2, ..., an(1≤ai≤M) trong đó ai tương ứng là trọng lượng của kiện hàng thứ i
(i=1..n).
Kết quả: Ghi ra tệp văn bản có tên BL3.OUTgồm một dòng ghi một số nguyên là số chuyến xe
ít nhất. Các số trên cùng một dòng ghi cách nhau ít nhất một dấu cách.
ProgramBL3;
Constfin ='BL3.INP';
fout='BL3.OUT';
Vara:Array[1..1000] ofLongint;
n,M,i,S,dem:Longint;
f:Text;
Begin
Assign(f,fin);
Reset(f);
Readln(f,n,m);
Close(f);
dem:=1;
S:=0;
Fori:=1 ton do
IfS+a[i]<=M thenS:=S+a[i]
Else
Begin
dem:=dem+1;
S:=a[i];
End;
Assign(f,fout);
ReWrite(f);
Write(f,dem);
Close(f);
End.
Một cơ sở sản xuất hàng thủ công mỹ nghệ vừa nhận được một đơn đặt hàng
gia công nsản phẩm. Với số lượng đặt hàng lớn như vậy, cơ sở đã huy động hết
toàn bộ công nhân bắt tay vào làm ngay. Tuy nhiên đây lại là một sản phẩm mới
nên ngày đầu tiên cơ sở chỉ làm ra được ksản phẩm. Sang ngày thứ hai, các
công nhân đã thành thạo hơn nên số sản phẩm làm ra được nhiều gấp đôi ngày
thứ nhất. Và cứ như vậy, năng suất của ngày hôm sau lại cao gấp đôi ngày hôm
trước.
Yêu cầu:Hãy cho biết cơ sở cần bao nhiêu ngày để hoàn thành hết nsản
phẩm?
Kết quả ra:Xuất ra màn hình số ngày hoàn thành các sản phẩm theo đơn đặt
hàng.
Ví dụ :
Giải thích:
- Ngày thứ nhất làm 2 sản phẩm (còn lại 9 sản phẩm).
- Ngày thứ hai làm 4 sản phẩm (tổng cộng là 6, còn lại 5 sản phẩm).
- Ngày thứ ba có thể làm được 8 sản phẩm nhưng chỉ làm 5 sản phẩm còn lại.
Bạn Nam rất yêu thích lập trình, nhất là khi gặp những bài toán khó thì bạn ấy
càng cố gắng để giải cho xong. Có một lần, trong lúc suy nghĩ về một bài toán,
tay bạn ấy lại gõ ngẫu nhiên các phím trên bàn phím, đến khi nhìn lại thì trên
màn hình đã là một dãy ký tự. Kỳ lạ thay, mặc dù là gõ ngẫu nhiên không nhìn
bàn phím nhưng có những lúc bạn ấy chỉ toàn gõ vào các phím số.
Yêu cầu:Cho xâu ký tự S là dãy các ký tự mà bạn Nam đã gõ vào, hãy cho
biết bạn Nam đã gõ liên tiếp các phím số nhiều nhất là bao nhiêu lần?
Dữ liệu vào:Cho từ tệp văn bản có tên BL2.INPgồm một dòng chứa xâu ký
- Dòng đầu ghi số lần nhiều nhất mà bạn Nam gõ liên tiếp các phím số.
- Nếu có ký tự số được gõ vào thì dòng thứ hai ghi dãy các số mà bạn nam gõ
liên tiếp nhiều nhất đó. Nếu có nhiều dãy cùng có số lần gõ nhiều nhất như nhau
Ví dụ:
BL2.INP BL2.OUT
azp572gkxt8906dqsh13dj 4
8906
Trong kỳ thi hội khỏe phù đổng cấp huyện vừa qua có n vận động viên tham
gia chạy ngắn, các vận động viên được đánh số báo danh từ 1 đến n. Kết quả
chạy tiếp sức trong kỳ thi hội khỏe phù đổng cấp tỉnh, ban huấn luyện muốn
chọn ra 4 vận động viên chạy nhanh nhất trong số n vận động viên này.
Yêu cầu:Hãy cho biết số báo danh của 4 vận động viên được chọn. Biết rằng
Dữ liệu vào:Cho từ tệp văn bản có tên BL3.INPcó dạng như sau:
≤ 30000, i=1..n)
Kết quả:Ghi ra tệp văn bản có tên BL3.OUTgồm một dòng ghi 4 số nguyên
tương ứng là 4 số báo danh của 4 vận động viên được chọn (không cần ghi theo
thứ tự).
Các số trên cùng một dòng ghi cách nhau ít nhất một dấu cách.
Ví dụ:
BL3.INP BL3.OUT
13000
9800
10200
11500
10060
12050
11200
2357
Lưu ý: Thí sinh không được sử dụng tài liệu. Giám thị không giải thích gì thêm.
a. Thuật toán:
Varn,k,S,dem:Longint;
Begin
Readln(n);
Write('So san pham san xuat trong ngay dau tien = ');
Readln(k);
S:=0;
dem:=0;
WhileS<n do
Begin
dem:=dem+1;
S:=S+k;
k:=k*2;
End;
Readln;
End.
c. Bộ TEST:
1 n = 10
k = 20
1 1,0
2 n = 300
k = 299
2 1,0
3 n = 250
k = 250
1 1,0
4 n = 5000
k=1
13 1,0
5 n = 15700
k=5
12 1,0
6 n = 50000
k=2
15 1,0
7 n = 100000
k=3
16 1,0
a. Thuật toán:
ProgramBL2;
Constfin = 'BL2.INP';
fout= 'BL2.OUT';
VarS:String;
i,max,dem,vitri:Integer;
f:Text;
Begin
Assign(f,fin);
Reset(f);
Read(f,S);
Close(f);
max:=0;
dem:=0;
Fori:=1 toLength(S) do
Begin
dem:=dem+1;
Ifdem>max then
Begin
max:=dem;
vitri:=i;
End;
End
Elsedem:=0;
Assign(f,fout);
ReWrite(f);
Writeln(f,max);
Write(f,Copy(S,vitri-max+1,max));
Close(f);
End.
c. Bộ TEST:
sjdh25jsh00491sadjh2763smdajk 5
00491
0,5
0,5
sjdh;';7634re57834dfg57346gfh738947fkjash
3987ueirtjkdf,./l834782342907jshjlhk
12
834782342907
0,5
0,5
nb3478jdf348jgfh9038fgj348975dkj0-347dfg
83475jkfjk89-\=-aksdjh347jh000000000jksh
000000000
0,5
0,5
07304657018963457627456 23
07304657018963457627456
0,5
0,5
hjhdf346576347895hjfgsdasdjklh8930247508
3740fghjdfhgjkdhfjk5389034750834750-812
ajkgjksdf12389374508723489057346587413
67jhjk32762637ghsdgfsd7826789623457862
3478gsdgfhjsdggduyrtpy76789165789165018
6jhkjlasdggfhjasdgy576157645gfsgdfhlsgadfl
3478gwdhjsdhsa
31
123893745087234890573465874
1367
0,5
0,5
a. Thuật toán:
Sắp xếp dãy t theo thứ tự tăng dần và chọn 4 phần tử đầu. Lưu ý khi sắp xếp lưu
Constfin = 'BL31.INP';
fout= 'BL31.OUT';
Vart,sbd:Array[1..1000] ofInteger;
n,i,j,tam:Integer;
f:Text;
Begin
Assign(f,fin);
Reset(f);
Readln(f,n);
Close(f);
Fori:=1 to4 do
Forj:=i+1 ton do
Ift[i]>t[j] then
Begin
tam:=t[i];
t[i]:=t[j];
t[j]:=tam;
tam:=sbd[i];
sbd[i]:=sbd[j];
sbd[j]:=tam;
End;
Assign(f,fout);
ReWrite(f);
Close(f);
End.
1 BL31.INP 7 10 12 14 1,0
2 BL32.INP 16 33 66 97 1,0
---Hết---
Tôn sư trọng đạo là một truyền thống văn hoá vô cùng tốt đẹp của dân tộc ta.
Để tỏ lòng tri ân đến quý thầy cô nhân ngày nhà giáo Việt Nam, các bạn học sinh lớp
9A dự định sẽ mua những cành hoa hồng đẹp nhất để tặng cho tất cả thầy cô trong
toàn trường. Theo tìm hiểu của bạn lớp trưởng thì nhà trường có nthầy cô giáo, do đó
Tại cửa hàng bán hoa, giá của mỗi cành hoa hồng là mđồng. Tuy nhiên, cửa
hàng có chính sách giảm giá nếu khách hàng mua từ acành hoa hồng trở lên thì giá
Yêu cầu:Hãy tính tổng số tiền mà các bạn lớp 9A cần có để mua đủ số cành
Dữ liệu vào:Nhập từ bàn phím các giá trị n, m, a(n, m, a là các số nguyên,
1≤n≤100, 1000≤m≤10000, 5≤a≤50). Giả thiết dữ liệu được nhập đúng, không cần
kiểm tra.
Kết quả ra:Xuất ra màn hình số tiền cần có. Kết quả làm tròn đến phần
nguyên.
Ví dụ 1:
Ví dụ 2:
Giải thích: giá mỗi hoa là 1000 đồng, nhưng mua số lượng nhiều hơn 10 hoa
được giảm 25% nên giá mỗi hoa giảm còn 750 đồng
Trang 2/7
Trong ngày Tết Trung thu, nhà thiếu nhi đã tổ chức rước đèn trung thu cho các
em thiếu thi. Tất cả các em đều hào hứng tham gia các trò chơi của ban tổ chức. Để
động viên tinh thần các em, ban tổ chức sẽ chấm điểm ở các trò chơi để xếp hạng và
phát quà. Tuy nhiên vì là ngày vui, ban tổ chức muốn tất cả các em đều nhận được
Cách phát quà của ban tổ chức như sau: em xếp hạng cuối cùng sẽ được 1 gói
quà, em xếp hạng kế trên em cuối cùng được 4 gói quà,…Nói chung, em xếp hạng
cao sẽ có số gói quà nhiều hơn bạn xếp hạng liền sau mình 3 gói quà. Biết rằng có n
em tham gia rước đèn trung thu và khi tổng kết điểm thì không có hai em nào có cùng
số điểm.
Yêu cầu:Hãy cho biết ban tổ chức cần chuẩn bị bao nhiêu gói quà để phát
trong đêm Trung thu nếu số lượng em thiếu nhi tham gia đã được biết trước?
Dữ liệu vào:Nhập từ bàn phím số nguyên dương n là số em thiếu nhi tham gia
Kết quả ra:Xuất ra màn hình số gói quà mà ban tổ chức cần chuẩn bị.
Ví dụ:
Giải thích: Số quà từng em nhận được lần lượt là: 1, 4, 7, 10, 13
Dọc theo con đường tơ lụa, những con lạc đà cần mẫn chuyên chở tơ lụa,
hương liệu và ngọc ngà đá quý của Phương Đông. Đá quý được phân thành 26 loại
ký hiệu bằng chữ cái la tinh thường từ a đến z. Các lái buôn muốn bán được hàng với
giá càng cao càng tốt. Trong chuyến đi này một lái buôn mang theo bộ đá quý gồm n
viên (1 ≤ n≤ 250). Ông xâu tất cả thành chuỗi và bày ra trên thảm trước một lãnh
chúa hùng mạnh. Vị lãnh chúa cân nhắc đánh giá chất lượng bộ đá quý để quyết định
có nên mua hay không. Theo quy tắc truyền thống của địa phương, giá trị của chuỗi
ngọc phụ thuộc vào sự xuất hiện các cặp ngọc (ai
, bi
đi
trước loại bi(i= 1..k, 1 ≤ k≤ 676). Nếu giá trị chuỗi ngọc đủ lớn, lãnh chúa sẽ mua
Yêu cầu:Cho biết số viên ngọc n, xâu Sthể hiện các loại ngọc trong chuỗi và
cách định giá trị chuỗi ngọc của địa phương. Hãy xác định giá trị của chuỗi ngọc.
Dữ liệu vào:Cho từ tệp văn bản có tên BL3.INPcó dạng như sau:
- Tiếp theo là k dòng, mỗi dòng chứa hai ký tự xác định cặp giá trị.
Kết quả:Ghi ra tệp văn bản có tên BL3.OUTgồm một số nguyên duy nhất là
Trang 3/7
Ví dụ:
BL3.INP BL3.OUT
73
abacaba
ab
ac
bb
Giải thích:
- Dòng thứ ba là cách thứ nhất xác định cặp giá trị: ngọc loại a đứng trước ngọc
- Dòng thứ tư là cách thứ hai xác định cặp giá trị: ngọc loại a đứng trước ngọc
- Dòng thứ năm là cách thứ ba xác định cặp giá trị: ngọc loại b đứng trước
Tranh thủ trong giờ ra chơi, hai bạn Nam và Bình rủ nhau chơi trò tìm số. Hai
bạn lần lượt mỗi người viết một số nguyên lên bảng, Nam viết số thứ nhất, Bình viết
số thứ hai, rồi đến lượt Nam viết số thứ ba,… Cứ tiếp tục như vậy hai bạn viết được
một dãy gồm nsố a1, a2, …, an. Đến đây hai bạn chưa kịp chơi trò chơi của mình thì
đã đến giờ học. Thầy vào lớp, sẳn thấy dãy số trên bảng, thầy đã đặt ra câu đố: Tìm
một đoạn liên tiếp các số trong dãy số trên sao cho tổng giá trị các số trong đoạn đó là
lớn nhất. Vì dãy số có quá nhiều số nên cả lớp nhìn hoa cả mắt mà vẫn chưa tìm ra
được đáp án. Bạn hãy lập trình giải giúp các bạn trong lớp nhé.
Dữ liệu vào:Cho từ tệp văn bản có tên BL4.INPcó dạng như sau:
≤ 1000, i=1..n)
Kết quả:Ghi ra tệp văn bản có tên BL4.OUTgồm một số nguyên duy nhất là
tổng lớn nhất của một đoạn liên tiếp các số trong dãy.
Ví dụ:
BL4.INP BL4.OUT
10
2 -9 4 1 -3 5 8-7 3 1
15
Chữ ký của giám thị 1: ...................... Chữ ký của giám thị 2: ............................
Lưu ý: Thí sinh không được sử dụng tài liệu. Giám thị không giải thích gì thêm.
abacaba
abacaba
a b a c a b a
Trang 4/7
a. Thuật toán:
Kiểm tra nếu số hoa cần mua nhỏ hơn số hoa tối thiểu để được giảm giá thì số tiền =
số hoa * đơn giá; ngược lại thì số tiền = số hoa * đơn giá * 0.75
ProgramBL1;
Varn,m,a:Longint;
Begin
Readln(n);
Readln(m);
Readln(a);
Ifn<a then
Else
Readln;
End.
c. Bộ TEST:
1 n = 20
m = 5000
a = 30
100000 1,0
2 n = 25
m = 1200
a = 50
30000 1,0
3 n = 15
m = 1800
a=5
20250 1,0
4 n = 27
m = 1200
a = 27
24300 1,0
5 n = 100
m = 10000
a = 30
750000 1,0
Trang 5/7
a. Thuật toán:
Đây là bài toán tính tổng n phần tử đầu tiên của cấp số cộng có công sai d=3. Cũng
ProgramBL2;
Varn,i,a,S:Longint;
Begin
Readln(n);
S:=1; a:=1;
Fori:=2 ton do
Begin
a:=a+3;
S:=S+a;
End;
Readln;
End.
c. Bộ TEST:
1 10 145 1,0
a. Thuật toán:
Với mỗi cặp vị trí i và j (i<j) trong xâu chuỗi, ta kiểm tra xem cặp ký tự Si, S
có nằm
trong số k cặp giá trị hay không. Để giảm thời gian kiểm tra, ta dùng một mảng hai chiều
ProgramBL3;
Constfin ='BL3.INP';
fout='BL3.OUT';
VarA:Array['a'..'z','a'..'z'] ofInteger;
S:String;
c1,c2:Char;
n,k,i,j,d:Longint;
f:Text;
Begin
Assign(f,fin);
Reset(f);
Readln(f,n,k);
Readln(f,S);
Trang 6/7
Fori:=1 tok do
Begin
Readln(f,c1,c2);
A[c1,c2]:=1;
End;
Close(f);
n:=Length(S);
d:=0;
Fori:=1 ton-1 do
Assign(f,fout);
ReWrite(f);
Write(f,d);
Close(f);
End.
1 BL31.INP 13 1,0
2 BL32.INP 52 1,0
a. Thuật toán:
Mỗi đoạn con được xác định bởi vị trí phần tử bắt đầu đoạn và vị trí phần tử cuối
đoạn. Với mỗi đoạn con, ta tính tổng các phần tử của đoạn rồi so sánh chọn ra tổng lớn nhất.
Khi đó ta có ai+ ai+1+ … + aj= Sj– Si-1(ở đây ta khởi tạo S0=0)
Constfin ='BL4.INP';
fout='BL4.OUT';
VarS:Array[0..1000] ofLongint;
n,x,i,j,max:Longint;
f:Text;
Begin
Assign(f,fin);
Reset(f);
Readln(f,n);
S[0]:=0;
Fori:=1 ton do
Begin
Read(f,x);
S[i]:=S[i-1] + x;
End;
Close(f);
Trang 7/7
max:=S[1];
Fori:=1 ton do
Forj:=i ton do
Assign(f,fout);
ReWrite(f);
Write(f,max);
Close(f);
End.
1 BL41.INP 9 1,0
---Hết---
Tam giác vuông ABC (Â=900) có AH là đường cao. Viết chương trình cho
phép nhập BH và CH từ bàn phím rồi thực hiện:
Viết chương trình cho phép nhập một dãy gồm n số nguyên (Số n và các
phần tử của dãy được nhập từ bàn phím). Thực hiện:
c. Dãy đan dấu là dãy có tính chất: không có hai phần tử cạnh nhau có
dấu giống nhau. Cho biết dãy vừa nhập (không chứa phần tử 0) có đan
dấu không?
Ví dụ:
So M la: 6
Nhap so N: 30 Cac uoc cua N la: 1; 2; 3; 5; 6; 10; 15;
30
So M là: 24
Nhap so N: 0 Nhap so N: (Yêu cầu nhập lại số N)
Xét các chữ số từ 0 đến 9. Nếu chữ số có một đường khép kín thì ta gọi chữ số đó
có 1 lỗ hổng, có hai đường khép kín thì ta gọi số đó có 2 lỗ hổng, và không có đường
khép kín nào thì ta gọi chữ số đó có 0 lỗ hổng. Vậy các chữ số 0, 4, 6, 9 có 1 lỗ hổng,
chữ số 8 có 2 lỗ hổng và các chữ số 1, 2, 3, 5, 7 có 0 lỗ hổng. Số lỗ hổng của một số tự
nhiên N là tổng số lỗ hổng của các chữ số của nó.
Hãy viết chương trình cho phép đếm số lỗ hổng của một số tự nhiên N (0 ≤ N ≤
2147483647).
Ví dụ:
==HẾT==
ĐỀ CHÍNH THỨC - VÒNG II
Bài 1 (2,5 điểm):
Viết chương trình nhập vào từ bàn phím một số nguyên dương n
(n≤1000), sau đó tính và in lên màn hình giá trị của các biểu thức sau (kết quả
lấy đến 6 chữ số thập phân):
b.
Tìm tất cả các số có bốn chữ số thỏa mãn tính chất: Nếu chọn xóa đi một
chữ số thích hợp nào đó của nó thì số đó giảm đi 9 lần.
Ví dụ: Số 1350 khi chọn và xóa đi số 3 ta được 150. Vì 150 . 9 = 1350 nên
1350 là số cần tìm.
Viết chương trình cho phép nhập ngày, tháng, năm và in ra ngày, tháng,
năm của ngày hôm sau. Biết rằng:
Năm nhuận là năm chia hết cho 4 nhưng không chia hết cho 100.
Ví dụ:
Hãy viết chương trình in ra các số Amstrong nhỏ hơn hoặc bằng n với n
được nhập từ bàn phím.
==HẾT==
Until BH>0;
Repeat
Until CH>0;
Tính AB AB:=sqrt(BH*(BH+CH)); 0,50
Writeln('AB = ',AB:4:2);
Tính diện AC:=sqrt(CH*(BH+CH)); 0,50
tích
Writeln('Dien tich tam giac ABC: ',AB*AC/2:4:2);
Readln;
End.
Cụ thể:
- Khai báo: Nếu khai báo kiểu số nguyên thì cho 0,25 điểm.
- Nhập dữ liệu: Nhập mỗi dữ liệu (BH, CH) cho 0,25 điểm.
- Tính và in: Do có rất nhiều cách tính khác nhau nên GK cần xem xét phương pháp mỗi cách tính để định điểm
theo khung trên. Nếu in không định dạng (Ví dụ: thiếu:4:2 trong lệnh in) trừ 0,25 điểm cho cả hai câu.
Bài 2:(3,0 điểm)
Var n,i,max:integer;
M:array[1..20] of integer;
ok:boolean;
Nhập mảng Begin 0,50
For i:=1 to n do
Begin
Write('M[',i,']=');Readln(M[i]);
End;
Tìm phần tử max:=M[1]; 0,50
lớn nhất
For i:=2 to n do if M[i]>Max then Max:=M[i];
Readln
End.
Chi tiết:
+ Nếu không có phần tử chính phương nào thì in 'Cac phan tu chinh phuong la: ' rồi để
trống.
- Kiểm tra t/c đan dấu: Có thể thay For i:=1 to n-1 do if M[i]*M[i+1]>0 bằng For i:=2 to n
do if M[i]*M[i-1]>0
Write('Nhap so N: ');Readln(N);
Until N>0
Tìm các ước Write('Cac uoc cua N la: '); 0,50
của N
For i:=1 to N do if N mod i = 0 then Write(i,';');
Writeln;
Tìm số ước SU:=0; 0,50
Begin
Tìm ước của SU:=0; 0,50
mỗi số J
For i:=1 to j do if j mod i = 0 then
SU:=SU+1;
So sánh với if SU > Max then 0,50
Max để lưu lại
số có nhiều Begin
ước nhất
Max:=SU;
M:=j;
End;
End;
In ra M Write('So ',M,' co nhieu uoc nhat va so uoc la ',max); 0,25
Readln
End.
Cụ thể: Trong trường hợp có nhiều số có số ước nhiều nhất bằng nhau thì chỉ yêu cầu in ra một số. Ví dụ: Với
N = 32 thì có hai số M thỏa là 24 và 30 đều có số ước nhiều nhất bằng nhau là 8. Lúc đó có thể in ra 24 hoặc
30 hoặc cả hai số.
Var N: longint;
cs,lh:integer;
Nhập N, Begin 0,25
khởi tạo lh
Write('Nhap so N: ');Readln(N);
lh:=0;
Lấy chữ số Repeat 0,25
cuối cs:=N mod 10;
Kiểm tra để if cs = 8 then lh:=lh+2 else 0,50
tính và cộng
số lỗ hổng if (cs=0) or(cs=4) or(cs=6) or(cs=9) then
lh:=lh+1;
Xóa chữ số N:=N div 10; 0,25
cuối
ĐK lặp until N = 0; 0,25
In ra lh Writeln('So N co ',lh,' lo hong'); 0,25
Readln
End.
Chi tiết:
-Khai báo: Cần khai báo biến N kiểu Longint mới thỏa giới hạn N của đề
Tìm lh: Nếu dùng vòng lặp while N>0 do ... thì trường hợp N = 0 sẽ tính lh = 0 trong khi kết quả đúng là 1.
Trường hợp này trừ 0,25 điểm.
Var n,i:integer;
T,S,PS:real;
Nhập dữ Begin 0,25
liệu Write('Nhap n: ');Readln(n);
Gán GT T:=0; 0,25
đầu
Tính T For i:=n downto 1 do 0,50
T:=SQRT(T+i);
In T Writeln('T = ',T:10:8); 0,25
Gán GT PS:=1; S:=0; 0,25
đầu
Tính S For i:=1 to n do 0,50
Begin
PS:=PS/i;
S:=S+PS;
End;
In S Write('S = ',S:10:8); 0,25
Readln
End.
Var a,b,c,d:byte;
So4,So31,so32,so33,so34:integer;
Duyệt qua Begin 0.50
tất cả các
số có bốn For a:=1 to 9 do
chữ số
For b:=0 to 9 do
For c:= 0 to 9 do
For d:=0 to 9 do
Lập các số Begin 1.00
So4:=a*1000+b*100+c*10+d;
So31:=b*100+c*10+d;
So32:=a*100+c*10+d;
So33:=a*100+b*10+d;
So34:=a*100+b*10+c;
Xét điều if (So4=So31*9) or (So4=So32*9) or (So4=So33*9) or 0,50
kiện (So4=So34*9) then
In các số Writeln(So4:6,So4 div 9:6); 0,25
thỏa mãn.
End;
Readln;
End.
Cụ thể:
- Khai báo: Có thể sử dụng các kiêu dữ liệu nguyên khác để khai báo.
- Đối với các vòng lặp: Biến a chạy từ 1 đến 9; các biến b,c,d chạy từ 0 đến 9. Nếu sai cho mỗi trường hợp a: -
0,25 điểm; b,c,d: -0,25 điểm.
Begin
Write('Ngay: ');Readln(ngay);
Write('Thang: ');Readln(thang);
Write('Nam:');Readln(nam);
Tăng ngay lên ngay:=ngay+1; 0,25
1
Tháng đủ, Case thang of 0,50
ngày > 31 thì
sang ngày 1 1,3,5,7,8,10,12:
tháng tiếp theo
if ngay > 31 then
Begin
ngay:=1;
thang:=thang+1;
Nếu tháng >12 if thang>12 then 0,25
thì sang tháng
1 năm tiếp Begin
theo
thang:=1;
nam:=nam+1;
End;
End;
Tháng thiếu 4,6,9,11: 0,25
ngày >30 thì
sang ngày 1 if ngay > 30 then
tháng tiếp theo
Begin
ngay:=1;
thang:=thang+1;
End;
Năm nhuận, 2: if (nam mod 4 = 0) and (nam mod 100 <>0) then 0,50
ngày >29
Begin
Begin
ngay:=1;
thang:=thang+1;
End;
end
Năm không else 0,25
nhuận, ngày
>28 if ngay > 28 then
Begin
ngay:=1;
thang:=thang+1;
End;
End;
In kết quả Writeln('Ngay hom sau: ', ngay,'/',thang,'/',nam); 0,25
Readln
End.
Var k:byte;
M:array[1..10] of byte;
n,i,ii,S:longint;
Hàm tính Function Mu(a,b:integer):Longint; 0,50
lũy thừa
Var T:Longint;i:byte;
Begin
T:=1;
Mu:=T
End;
Nhập dữ Begin 0,25
liệu Write('Nhap so n: ');Readln(n);
Tách lấy {Duyet qua cac so tu 1 den n} 0,75
các chữ số
và tìm số For i:=1 to n do
chữ số
{Tach lay cac chu so }
Begin
k:=0; ii:=i;
while ii<> 0 do
Begin
k:=k+1;
ii:=ii div 10
End;
Lập giá trị {lap so va xet} 0,50
biểu thức
S:=0;
Readln;
End.