CodeAN
Chia sẻ bởi Lê Nguyên |
Ngày 16/10/2018 |
87
Chia sẻ tài liệu: CodeAN thuộc Tin học 9
Nội dung tài liệu:
Code 1:
Const f1=`D:string.inp`;
f2=`D:string.out`;
Var s,t: string;
f,b: array[1..100] of string;
g,trace: array[0..100] of longint;
n,m: Longint;
Procedure Enter;
Begin
Assign(input,f1); Reset(input);
Readln(s);
Close(input);
end;
Function Bigger(x,y: string): Boolean;
Begin
while length(x) < length(y) do x := `0` + x;
while length(x) > length(y) do y := `0` + y;
if x>y then exit else exit;
end;
Procedure Process;
Var i,j,u: Longint;
Begin
Assign(output,f2); Rewrite(output);
n := length(s);
For i:=1 to n do f[i] := ``;
f[1] := s[1];
g[1] := 1;
g[n] := 1;
For i:=2 to n do
begin
For j:=i-1 downto 1 do
begin
t := copy(s,j+1,i-j);
if Bigger(t,f[j]) then
if g[j] + 1 >= g[i] then
begin
f[i] := t;
g[i] := g[j] + 1;
trace[i] := j;
end;
end;
end;
if g[n] = 1 then
begin
writeln(s);
exit;
end;
u := n;
while u<>0 do
begin
inc(m);
b[m] := f[u];
u := trace[u];
end;
For i:=m downto 1 do write(b[i]);
Close(output);
End;
Begin
Enter;
Process;
End.
Code 2:
Program STR;
Var s: string;
n: byte;
x: array[0..150] of string;
i: integer;
ok: boolean;
Function isBigger(a, b: string): boolean;
Begin
while length(a) < length(b) do a := `0` + a;
while length(b) < length(a) do b := `0` + b;
exit;
End;
Procedure try(i: longint; st: string);
Var j: integer;
Begin
x[i] := ``;
for j := 1 to length(st) do
begin
x[i] := x[i] + st[j];
if isBigger(x[i], x[i - 1]) or (i = 1) then
if j = length(st) then begin ok := true; n := i end
else try(i + 1, copy(st, j + 1, length(st) - j));
if ok then exit;
end;
End;
Begin
assign(input, `D:string.INP`); reset(input);
assign(output, `D:string.OUT`); rewrite(output);
readln(s);
x[0] := ``;
ok := false;
try(1, s);
for i := 1 to n do write(x[i], ` `);
End.
Bài tập:
Bài 1. Biến đổi xâu
Cho một xâu S chỉ gồm các chữ cái in thường với độ dài tối đa 250 ký tự. Em hãy viết chương trình để tạo ra xâu ST từ xâu S bằng cách xóa các ký tự liên tiếp giống nhau trong xâu S và chỉ để lại một kí tự đại diện trong đoạn đó.
Dữ liệu vào: Đọc từ file văn bản Xau.Inp chứa xâu S chỉ gồm các chữ cái in thường.
Kết quả: Ghi ra file văn bản Xau.Out là xâu ST tìm được.
Ví dụ
Xau.inp
Xau.out
Hhooocccsssiiiiinnnhhhgiiiiooi
hocsinhgioi
Bài 2. Ghép số lớn
Nam đã viết được một số lớn trên một cuộn giấy dài và muốn khoe với anh trai về thành quả vừa đạt được. Tuy nhiên, khi Nam vừa ra khỏi phòng để gọi anh trai
Const f1=`D:string.inp`;
f2=`D:string.out`;
Var s,t: string;
f,b: array[1..100] of string;
g,trace: array[0..100] of longint;
n,m: Longint;
Procedure Enter;
Begin
Assign(input,f1); Reset(input);
Readln(s);
Close(input);
end;
Function Bigger(x,y: string): Boolean;
Begin
while length(x) < length(y) do x := `0` + x;
while length(x) > length(y) do y := `0` + y;
if x>y then exit else exit;
end;
Procedure Process;
Var i,j,u: Longint;
Begin
Assign(output,f2); Rewrite(output);
n := length(s);
For i:=1 to n do f[i] := ``;
f[1] := s[1];
g[1] := 1;
g[n] := 1;
For i:=2 to n do
begin
For j:=i-1 downto 1 do
begin
t := copy(s,j+1,i-j);
if Bigger(t,f[j]) then
if g[j] + 1 >= g[i] then
begin
f[i] := t;
g[i] := g[j] + 1;
trace[i] := j;
end;
end;
end;
if g[n] = 1 then
begin
writeln(s);
exit;
end;
u := n;
while u<>0 do
begin
inc(m);
b[m] := f[u];
u := trace[u];
end;
For i:=m downto 1 do write(b[i]);
Close(output);
End;
Begin
Enter;
Process;
End.
Code 2:
Program STR;
Var s: string;
n: byte;
x: array[0..150] of string;
i: integer;
ok: boolean;
Function isBigger(a, b: string): boolean;
Begin
while length(a) < length(b) do a := `0` + a;
while length(b) < length(a) do b := `0` + b;
exit;
End;
Procedure try(i: longint; st: string);
Var j: integer;
Begin
x[i] := ``;
for j := 1 to length(st) do
begin
x[i] := x[i] + st[j];
if isBigger(x[i], x[i - 1]) or (i = 1) then
if j = length(st) then begin ok := true; n := i end
else try(i + 1, copy(st, j + 1, length(st) - j));
if ok then exit;
end;
End;
Begin
assign(input, `D:string.INP`); reset(input);
assign(output, `D:string.OUT`); rewrite(output);
readln(s);
x[0] := ``;
ok := false;
try(1, s);
for i := 1 to n do write(x[i], ` `);
End.
Bài tập:
Bài 1. Biến đổi xâu
Cho một xâu S chỉ gồm các chữ cái in thường với độ dài tối đa 250 ký tự. Em hãy viết chương trình để tạo ra xâu ST từ xâu S bằng cách xóa các ký tự liên tiếp giống nhau trong xâu S và chỉ để lại một kí tự đại diện trong đoạn đó.
Dữ liệu vào: Đọc từ file văn bản Xau.Inp chứa xâu S chỉ gồm các chữ cái in thường.
Kết quả: Ghi ra file văn bản Xau.Out là xâu ST tìm được.
Ví dụ
Xau.inp
Xau.out
Hhooocccsssiiiiinnnhhhgiiiiooi
hocsinhgioi
Bài 2. Ghép số lớn
Nam đã viết được một số lớn trên một cuộn giấy dài và muốn khoe với anh trai về thành quả vừa đạt được. Tuy nhiên, khi Nam vừa ra khỏi phòng để gọi anh trai
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Lê Nguyên
Dung lượng: 38,50KB|
Lượt tài: 0
Loại file: doc
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)