Bài 12: Kiểu xâu

lê chí hiếu

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

lê chí hiếu
5 tháng 9 2019 lúc 15:45

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.

Minh Lệ
6 tháng 9 2019 lúc 16:23

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.

Minh Lệ
6 tháng 9 2019 lúc 16:33

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.

lê chí hiếu
7 tháng 9 2019 lúc 17:41

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


Các câu hỏi tương tự
nguyễn an phát
Xem chi tiết
Ngân Minh Anh
Xem chi tiết
Phạm Xuân Trường
Xem chi tiết
Vev37e9h Gev2vyw
Xem chi tiết
Thanh Nhi Phạm
Xem chi tiết
Nguyễn khánh thành
Xem chi tiết
NTKL
Xem chi tiết
lê chí hiếu
Xem chi tiết
Nguyễn Hoai Nam
Xem chi tiết