ACM 417 Word Index
作法1:建表
作法2:數學解(巴斯卡)
(巴斯卡請參考 ZeroJudge d209: 古代神祕文字 解答:古代神秘文字)
題目有點類似 不過我懶得修改了
/*******************作法1*********************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int abc[83683][6]={0};
main()
{
int top=1,a,b,c,d,e;
for(a=1;a<=26;a++)
{abc[top][0]=a;top++;}
for(a=1;a<=26;a++)
for(b=a+1;b<=26;b++)
{abc[top][0]=a;abc[top][1]=b;top++;}
for(a=1;a<=26;a++)
for(b=a+1;b<=26;b++)
for(c=b+1;c<=26;c++)
{abc[top][0]=a;abc[top][1]=b;abc[top][2]=c;top++;}
for(a=1;a<=26;a++)
for(b=a+1;b<=26;b++)
for(c=b+1;c<=26;c++)
for(d=c+1;d<=26;d++)
{abc[top][0]=a;abc[top][1]=b;abc[top][2]=c;abc[top][3]=d;top++;}
for(a=1;a<=26;a++)
for(b=a+1;b<=26;b++)
for(c=b+1;c<=26;c++)
for(d=c+1;d<=26;d++)
for(e=d+1;e<=26;e++)
{abc[top][0]=a;abc[top][1]=b;abc[top][2]=c;abc[top][3]=d;abc[top][4]=e;top++;}
char x[10];
while(scanf("%s",x)==1)
{
int temp[10]={0},flag=0;
for(a=0;a<strlen(x);a++)
{
temp[a]=x[a]-'a'+1;
if(x[a]>=x[a+1]&&a+1<strlen(x)) flag=1;
}
if(flag==1) printf("0\n");
else
{
for(a=1;a<=83682;a++)
{
for(b=0;b<5;b++)
if(abc[a][b]!=temp[b]) break;
if(b==5) {printf("%d\n",a);break;}
}
}
}
return 0;
}