Câu 1 (6,0 điểm): Tính giá trị
Nhập vào 2 số nguyên dương N và M.
Yêu cầu: Tính tổng M các số tận cùng của N.
Dữ liệu vào: Cho trong file văn bản CAU1.INP, có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N.
- Dòng 2: Ghi số nguyên dương M (M≤ N) .
Dữ liệu ra: Ghi ra file văn bản CAU1.OUT, theo cấu trúc như sau:
- Ghi kết quả tổng của M số tận cùng của N.
Ví dụ:
CAU1.INP |
CAU1.OUT |
34562 2 |
8 |
Câu 2 (7,0 điểm): Tìm số
Dãy các số tự nhiên được viết ra thành một dãy vô hạn trên đường thẳng:
1234567891011121314..... (1)
Yêu cầu: Viết chương trình yêu cầu nhập số K và in lên tệp CAU2.OUT kết quả là số nằm ở vị trí thứ K trong dãy (1) ở trên và số đó thuộc vào số nào?
Dữ liệu vào: Cho trong file văn bản CAU2.INP, có cấu trúc như sau:
- Ghi số nguyên dương K
Dữ liệu ra: Ghi ra file văn bản CAU2.OUT, theo cấu trúc như sau:
- Trên 1 dòng in kết quả số ở vị trí K và số chứa số đó cách nhau ít nhất một dấu cách.
Ví dụ:
CAU2.INP |
CAU2.OUT |
15 |
2 12 |
Câu 3 (7,0 điểm): Đếm ký tự
Cho một văn bản gồm N dòng. Các ký tự được lấy từ tập các chữ cái và chữ số.
Yêu cầu: Tìm số lượng ký tự của dòng ngắn nhất, số lượng ký tự của dòng dài nhất và số lượng ký tự của văn bản.
Dữ liệu vào: Cho trong file văn bản CAU3.INP, có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N là số dòng của văn bản (1 ≤ N ≤ 100).
- N dòng tiếp theo: Mỗi dòng ghi một xâu gồm L ký tự (0 < L < 255).
Dữ liệu ra: Ghi ra file văn bản CAU3.OUT, theo cấu trúc như sau:
- Dòng 1: Ghi 3 số nguyên dương x y z. Trong đó: x là số lượng ký tự của dòng ngắn nhất; y là số lượng ký tự của dòng dài nhất, z là số lượng ký tự của văn bản. Các số được ghi cách nhau ít nhất một dấu cách.
Ví dụ:
CAU3.INP |
CAU3.OUT |
3 ThiHSG09 Nam2015 Vong1 |
5 8 20 |
cau1
uses crt;
const
fi='CAU1.inp';
fn='CAU1.out';
var n: string;
f:text;
m,i,a,tong: integer;
BEGIN
clrscr;
assign(f,fi);reset(f);
read(f,n);
read(f,m);
close(f);
assign(f,fn);rewrite(f);
for i:= length(n) downto length(n)-m+1 do
begin
val(n[i],a);
tong:=tong+a;
end;
write(f,tong);
close(f);
readln;
END.
cau3
uses crt;
const
fi='CAU1.inp';
fn='CAU1.out';
var n: string;
f:text;
m,i,a,tong: integer;
BEGIN
clrscr;
assign(f,fi);reset(f);
read(f,n);
read(f,m);
close(f);
assign(f,fn);rewrite(f);
for i:= length(n) downto length(n)-m+1 do
begin
val(n[i],a);
tong:=tong+a;
end;
write(f,tong);
close(f);
readln;
END.
Câu 2:
*Ý tưởng :
+ Ý 1:
- Bạn không cần chạy đến vô hạn như đề cho đầu , bạn chỉ cần 1 vòng for chạy đến k là được bởi vì nó lấy kí tự thứ k.
- Bạn cho 1 vòng for chạy đến k và chuyển dãy số đó sang xâu và cho 1 biến đếm vào
- Nếu biến đếm bằng với k thì write(s[d]);
+ Ý 2:
- Các số có 1 chữ số chỉ có từ 1 đến 9. Nên nếu d<9 thì write(s[d]);
- Nếu mà d>9 và d là số lẻ thì write(s[d-1],s[d]) ngược là nếu d là số chẵn thì write(s[d],s[d+1]);
Đây là ý tưởng , nếu bạn không hiểu chỗ nào cứ hỏi mình , bạn làm theo ý tưởng mình xem nhé. Nếu không được mình sẽ gửi bài làm của mình cho bạn xem.
Lời giải:
Mình gửi đáp án luôn nha, dạo này mình hơi bận nên sợ không gửi được cho bạn.
program hotrotinhoc;
const fi='cau2.inp';
fo='cau2.out';
var f: text;
s,st: string;
d: integer;
i,k: longint;
procedure ip;
begin
assign(f,fi);
reset(f);
read(f,k);
close(f);
end;
procedure out;
begin
assign(f,fo);
rewrite(f);
d:=0;
for i:=1 to k do
begin
str(i,s);
st:=st+s;
inc(d);
end;
if d=k then write(st[d],' ');
if d<9 then write(st[d]);
if (d>9) and (d mod 2=1) then write(st[d-1],st[d]);
if (d>9) and (d mod 2=0) then write(st[d],st[d+1]);
close(f);
end;
begin
ip;
out;
end.
const
fi='cau2.inp';
fo='cau2.out';
var f:text;
s,st:string;
d:integer;
i,k:longint;
procedure ip;
begin
assign(f,fi);reset(f);
read(f,k);
close(f);
end;
procedure out;
begin
assign(f,fo);rewrite(f);
d:=0;
for i:=1 to k do
begin
str(i,s);
st:=st+s;
inc(d);
end;
if d=k then write(st[d],'');
if d<9 then write(st[d]);
if (d>9) and (d mod 2=1) then write(f,st[d-1],st[d]);
if (d>9) and (d mod 2=0) then write(f,st[d],st[d+1]);
close(f);
end;
begin
ip;
out;
end.
chỉ ra 12 thôi