Bài1. Xâu đối xứng(2010).
Xâu
đối xứng là xâu đọc giống nhau nếu ta đọc từ trái
qua phải hoặc từ phải qua trái.
Ví
dụ:
xâu RADAR là xâu đối xứng.
Kiểm
tra xem một xâu có phải là xâu đối xứng hay không, nếu
đối xứng thì thông báo 1, nếu không đối xứng thì
thông báo là 0.
Dữ
liệu:
Vào từ file văn bản bai2.inp gồm:
Dòng
đầu tiên nghi một số nguyên n.
N
dòng tiếp theo mỗi dòng ghi các xâu cần kiểm tra
Kết
quả:
Ghi ra file văn bản bai2.out: Gồm n dòng, mỗi dòng ghi 0 nếu
xâu tương ứng không đối xứng hoặc ghi 1 nếu xâu tương
ứng đối xứng.
Giới
hạn: 0 < n < 30000; Các xâu có độ dài không quá 255
kí tự
Ví
dụ:
Bai2.inp Bai2.out
3 1
AHFA 0
ACDDB 0
ACRTT 0
Chuong
trinh:
var
f1, f2: text;
n,i
: word;
S:
string;
Function
kt(s: string): boolean;
var
i,k
: longint;
x:
boolean;
begin
x
:= true;
i
:= 1;
k
:= length(s);
while
(i <= t div 2 ) and x do
begin
if
s[i] <> s[t-i+1] then x := false;
i
:= t + 1;
end;
kt
:= x;
end;
Begin
assign(f1,'xdx.txt');
reset(f1);
assign(f2,'xdx.out');
rewrite(f2);
readln(f1,n);
for
i := 1 to n do
begin
readln(f1,S);
if
kt(S) then writeln(f2,1) else writeln(f2,0);
end;
close(f1);
close(f2);
End.
Bài 2. Xâu Palindrome
Một
xâu kí tự được gọi là xâu Palindrome ( đối xứng )
nếu ta đọc từ trái sang phải hay đọc từ phải sang
trái đều giống nhau.
Yêu
cầu: Cho trước một xâu kí tự S. Hãy xác định
số xâu đối xứng là xâu con của nó. Một kí tự cũng
được coi là một xâu đối xứng. Xâu con của S là xâu
gồm một số kí tự lien tiếp trong S.
Dữ liệu
vào: Từ tệp văn bản BAI2.INP:
- Dòng thứ nhất ghi số nguyên dương N (N<100).
- N dòng tiếp theo mỗi dòng là một xâu kí tự ( độ dài xâu <255).
Kết quả:
Ghi vào tệp văn bản BAI2.OUT gồm:
- N dòng, mỗi dòng chứa một số nguyên biểu thị số xâu con đối xứng.
BAI2.INP
|
BAI2.OUT
|
1
IOI |
4 |
var
f1, f2: text;
n,i,j,a,k
: longint;
dem
: longint;
s:
string;
Function
kt(s: string): boolean;
var
i,k
: longint;
x:
boolean;
begin
x
:= true;
i
:= 1; k := length(s);
while
(i <= k div 2 ) and x do
begin
if
s[i] <> s[k-i+1] then x := false;
i
:= k + 1;
end;
kt
:= x;
end;
Begin
assign(f1,'xdx.txt');
reset(f1);
assign(f2,'xdx.out');
rewrite(f2);
readln(f1,n);
for
i := 1 to n do
begin
readln(f1,s);
a:=
length(s); dem := 0;
for
k := 1 to a do
for
j := 1 to a-k+ 1 do
if
kt(copy(s,j,k)) then dem := dem + 1;
writeln(f2,dem);
end;
close(f1);
close(f2);
End.
Bài tập tìm max
Bài
1. Tổng của dãy số. (Năm 12-13)
Cho dãy a1,a2,… ,aN số tự nhiên. Hãy tính tổng các số
của dãy, cho biết số hạng lớn nhất trong dãy và vị
trí của số hạng này.
Dữ
liệu vào: Từ tệp văn bản BAI1.INP chỉ một dòng
chứa các số a1,a2, … ,aN ghi cách nhau một dấu cách. (
0< N <=10000; 0<= ai <= 60000 với i=1,2, … ,N).
Kết quả:
Ghi vào tệp văn bản BAI1.OUT có cấu trúc như sau:
- Dòng thứ nhất ghi tổng các số của dãy.
- Dòng thứ 2 ghi số lớn nhất.
- Dòng thứ 3 ghi các vị trí xuất hiện của số lớn nhất. Các số trên cùng một dòng ghi cách nhau một dấu cách.
BAI1.INP
|
BAI1.OUT
|
4 3 2 1 0 8 7 4 2 5 4 6 7 8 2 3 1 |
67
8
6 14 |
uses
crt;
var
s,n,i,j:longint;
a:array[1..10000]
of longint;
max,chiso:longint;
f1,f2:text;
BEGIN
assign(f1,'timmax.inp');reset(f1);
assign(f2,'timmax.out');rewrite(f2);
i:=1;s:=0;
while
not eof(f1) do
begin
read(f1,a[i]);
s:=s+a[i];
inc(i);
end;
max:=a[1];
for
j:=2 to i do
if
a[j] > max then max:=a[j];
writeln(f2,s);
writeln(f2,max);
for
j:=1 to i do if a[j]=max then write(f2,j,' ');
close(f1);close(f2);
END.
Bài 2:
(7 điểm) Tìm số lớn
Cho một dãy gồm N các ký tự có mặt trên bàn phím trong
đó có ít nhất 4 chữ số. (N< 106).
Yêu
cầu: Hãy loại bỏ một số ký tự khỏi dãy sao
cho 4 ký tự cuối cùng còn lại theo đúng thứ tự đó
tạo nên 1 số lớn nhất.
Dữ
liệu vào: File văn bản chứa BAI2.INP chứa N
ký tự.
Dữ
liệu ra: File văn bản BAI2.OUT chứa 4 chữ số
tạo thành số lớn nhất.
Ví dụ:
BAI2.INP
|
BAI2.OUT
|
24t5j4r05f704y652k393 | 7693 |
Chuong
trinh:
var
f1,f2:
text;
i,
k,j,n : longint;
a:
array[1..1000000] of char;
ch,max:
char;
begin
assign(f1,'timmax.txt');
reset(f1);
assign(f2,'timmax.out');
rewrite(f2);
i:=
1;
while
not eof(f1) do
begin
read(f1,ch);
if
(ch >= '0') and ( ch <= '9') then
begin
a[i] := ch ;
i
:= i + 1;
end;
end;
n
:= i - 1;
k
:= 1;
for
i:= 1 to 4 do
begin
max
:= a[k];
for
j := k+ 1 to n -4 + i do
if
a[j] > max then
begin
max
:= a[j];
k
:= j;
end;
write(f2,max);
k
:= k + 1;
end;
close(f1);
close(f2);
End.
Sign up here with your email
ConversionConversion EmoticonEmoticon