就例如题目中的样例数据:
五位的Jam数字,使用{b,c,d,e,f,g,h,i,j}这个集合中的这些字母
给你的数字是bdfij那么用我的想法:
检测这五位的最后一位是否为集合的最后一位,是那么删掉j
变成四位,同样检测,但只检测是否为集合的的倒数第2位,发现是,删掉i
变成三位数字,发现不是最后一位,那么把这一位进一,变成g
向后补一位(补至5位)补g的下一个,h
再往后补一位,i
就变成了bdghi
但还需注意的是:
题目中的“如果后面没有那么多Jam数字,那么有几个就输出几个”
这个用一个判定,如果删掉了全部数字而没有结果的话,就输出这个集合的最后W位
源代码如下:
var
h,e,i,j,k,w:integer;
s:string;
begin
readln(h,e,w);
readln(s);
inc(h,96);
inc(e,96);
for i:=1 to 5 do
begin
for j:=w downto 1 do
begin
if ord(s[j])=e-w+j then delete(s,length(s),1)
else break;
end;
if (length(s)=0)and(i=1)then break;
if length(s)=0 then
begin
for k:=e-w+1 to e do
s:=s+chr(k);
writeln(s);
break;
end
else
begin
delete(s,length(s),1);
s:=s+chr(ord(s[j])+1);
for k:=j+1 to w do
s:=s+chr(ord(s[j])+k-j);
writeln(s);
end;
end;
end.
var s,flag:string;
max,min,len,js:longint;
procedure init;
var ch:char;
begin
//assign(input,'data.in');reset(input);
//assign(output,'data.out');rewrite(output);
readln(min,max,len);
flag:='';
for ch:=chr(min+96) to chr(max+96) do flag:=ch+flag;
readln(s);
js:=0;
end;
procedure print;
begin
//close(input);close(output);
halt;
end;
procedure work;
var i,j,k:longint;
begin
for i:=len downto 1 do
if s[i]<>flag[len-i+1] then begin
j:=i+1;
s[i]:=succ(s[i]);
for k:=j to len do s[k]:=succ(s[k-1]);
writeln(s);
inc(js);
exit;
end;
print;
end;
begin
init;
while js<>5 do work;
end.