讨论 / pascal语言一次就AC了,留念,附解题思路
zdfei 2015-03-03 05:18:55
点我顶贴 收藏 删除
这题其实就是一个字符串处理问题

就例如题目中的样例数据:

五位的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.

#1 Justin_N_Wu@2016-01-31 04:38:10
回复 删除
100题留念,思想同楼上

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.

#2 神童卐鲜肉@2016-06-02 05:01:30
回复 删除
大神膜拜
查看更多回复
提交回复