Cho sâu S có độ dài không qúa 255 kí tự chỉ gồm các kí tự chữ cái thường và chữ số( đ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 có thể, mỗi số lấy ra không có các số 0 không có nghĩa. Ví dụ, với sâu là aab04dhf23vf789 các số được trích ra là 4,234,789) hãy viết chương trình tìm số bé nhất và số 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 timso.inp gồm một sâu S chỉ chứa các ký tự chữ cái thường và chữ số.
Kết quả: đưa ra tệp văn bản timso.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.
Bài này làm theo dạng nhập, xuất file nhé.
Các bạn đừng làm theo dạng nhập từ bàn phím.
Rất cám ơn ạ!
uses crt;
var s,t:string; d:text; i,n,min,max,a,e:longint;
begin
clrscr;
assign(d,’input.pas’);reset(d);
readln(d,s);
close(d);
assign(d,’output.pas’);rewrite(d);
for i:=1 to length(s) do if s[i]=’0′ then delete(s,i,1);
n:=length(s); min:=high(longint);
for i:=1 to n do
begin
if s[i]<=’9′ then t:=t+s[i];
if ((i-1>0)and(s[i-1]<=’9′)and(s[i]>’9′))or((i=n)and(s[i]<=’9′))then
begin
val(t,a,e);
If a>max then max:=a;
if a<min then min:=a;
t:=”;
end;
end;
writeln(d,min);
writeln(d,max);
close(d);
end.
//////
Giải thích
B1: Loại bỏ các số 0
B2: Trích số từ xâu
-Nếu s[i] là số thì đưa vào biến t
-nếu
(s[i] là chữ và trước đó là số) để biết đây là kết thúc của một số ngyên
hoặc(i đang ở cuối xâu vài s[i] là số)Không thỏa mản điều kiện trên thì chỉ có ở cuối xâu
nó là kết thúc của một số nguyên nhưng không có dấu hiệu cho biết như trên
thì tìm max,min.
Nếu có gì không hiểu hay code không hợp lí thì các bạn để lạ bình luận nha!!! 😀
Bài này mình cũng có giải bên kia rồi nên không ỏa là copy của người khác nhé
Đây là một số text:
Program HOC24;
const fi=’nhap.inp’;
fo=’nhap.out’;
var f: text;
t,code,min,max,i,j: integer;
a: array[1..1000] of string;
b: array[1..1000] of integer;
s: string;
procedure ip;
begin
assign(f,fi);
reset(f);
readln(f,s);
for i:=1 to length(s) do
if not(s[i] in [‘0′..’9′]) then s[i]:=’ ‘;
while s[1]=#32 do delete(s,1,1);
while pos(#32#32,s)<>0 do delete(s,pos(#32#32,s),1);
while s[length(s)]=#32 do delete(s,length(s),1);
close(f);
end;
procedure out;
begin
assign(f,fo);
rewrite(f);
s:=s+’ ‘; j:=0;
while length(s)<>0 do
begin
j:=j+1;
a[j]:=copy(s,1,pos(#32,s)-1);
delete(s,1,pos(#32,s));
end;
for i:=1 to j do
if a[i][1]=’0′ then delete(a[i],1,1);
for i:=1 to j do
begin
val(a[i],t,code);
b[i]:=t;
end;
min:=b[1]; max:=0;
for i:=1 to j do
begin
if min>b[i] then min:=b[i];
if b[i]>max then max:=b[i];
end;
writeln(f,min);
write(f,max);
close(f);
end;
begin
ip;
out;
end.