pascal删数游戏

来源:百度知道 编辑:UC知道 时间:2024/05/14 06:29:48
删数游戏
问题描述:

小明的老师近日在课堂上对全班同学提出了如下的删数问题供大家思考:任意给定一个有若干个数码组成的自然数n,,要求一个一个地在其中删除数字,共删除k个数,使得剩下的数码组成的数最小。小明回家后写了一些数进行试验,随后来到你处坚持要你帮他核对他删数所得的结果是否正确,你能帮他个忙吗?

输入:

输入的第1行是一个正整数T,表示下面有T行测试数据,(0<T<=20)。接下来有T行,每行上有两个正整数n、k,但正整数n的有效位数len可达240位,k<len。

输出:

对每组测试数据n、k,输出n被删除其中的k个数码后所的最小数字,该最小数字无多余的前导数码0。

输入样例:

2

178543 4

18541397 4

输出样例:

13

1137

program 001;
var t1,t2:string;
a,b:array[1..250] of integer;
i,j,r,s,s1:integer;
begin
readln(t1);
readln(s);
s1:=s; r:=0; t2:='';
for i:=1 to length(t1) do a[i]:=i;
repeat
i:=1;
for j:=1 to s1+1 do if t1[j]<t1[i] then i:=j;
if i>1 then
for j:=1 to i-1 do begin inc(r); b[r]:=a[j] end;
t2:=t2+copy(t1,i,1);
delete(t1,1,i);
for j:=1 to length(t1) do a[j]:=a[j+i];
s1:=s1-(i-1);

if length(t1)=s1 then
begin
for j:=1 to s1 do begin inc(r);b[r]:=a[j] end;
s1:=0; t1:='';
end;
until s1=0;
t2:=t2+t1;
writeln(t2);
for i:=1 to s do write(b[i],' ');
writeln;
end.