回 帖 发 新 帖 刷新版面

主题:[讨论]单词编码!悬赏50分~

一、单词编码
源程序名    WORDCODE.??? (PAS,BAS,C,CPP)
可执行文件名   WORDCODE.EXE
输入文件名   WORDCODE.IN
输出文件名     WORDCODE.OUT
时间限制       1S

单词由小写英文字母表组成, n为字母表的长度。例如:
n=1,表示由小写字母a组成单词,仅有一个a,编码为1
n=2,表示由[a,b]组成单词 其全部单词编码有:
     a   编码为1        ab  编码为2      b   编码为3
n=4,表示由[a,b,c,d]组成单词,其全部单词编码如下:
     a      编码为1     ab    编码为2    abc   编码为3
     abcd   编码为4     abd   编码为5    ac    编码为6
   acd    编码为7     ad    编码为8     b     编码为9
     bc     编码为10    bcd   编码为11    bd    编码为12
     c      编码为13    cd    编码为14    d     编码为15

输入
输入文件的第一行包含一个整数n(1≤n≤26),第二行为一个字母严格按升序排列的单词,该单词由前n个小写字母组成,且长度不超过n。

输出
输出文件的第一行且是唯一的一行应包含一个整数,表示该单词的编码。

样例
WORDCODE.IN
4
bcd

WORDCODE.OUT
11


回复列表 (共1个回复)

沙发

program wordcode;
var n,i,tot,bot:integer;
    st:string;
    a,s:array[1..26] of integer;

function leave:boolean;
var can:boolean;
begin
 can:=true;
 for i:=1 to 26 do if a[i]<>s[i] then begin can:=false; break; end;
 leave:=can;
end;

begin
 assign(input,'wordcode.in'); reset(input);
 assign(output,'wordcode.out'); rewrite(output);
 readln(n);
 readln(st);
 fillchar(a,sizeof(a),0);
 for i:=length(st) downto 1 do a[i]:=ord(st[i])-ord('a')+1;
 fillchar(s,sizeof(s),0);
 s[1]:=1; tot:=1; bot:=1;

 while not leave do
 begin
  if s[bot]=n then begin s[bot]:=0; inc(s[bot-1]); dec(bot); inc(tot); end
  else begin inc(bot); s[bot]:=s[bot-1]+1; inc(tot); end;
 end;

 writeln(tot);
 close(input); close(output);
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册