本题的关键在于分析题目时逻辑要清晰,要想找到神秘信息表示的最小整数,那么首先要是最小的进制且第一种字符对应数为1,其次应该较高位即在左侧的字符表示的整数小,所以我们要统计字符串的种类,对其进行赋值。
这里我们运用了比较讨巧的方法,因为ascll码一共128位,因此我们直接创建inf数组,长度128,初始化每一位为-1,这样我们用指针p依次指向神秘信息中每一位,将第一种字符赋1,若inf[*p]==-1,说明没出现过是新的字符,则对其赋值进制数N,并且对进制数+1,若N是0,即还未确定进制,则赋2(因为不存在1进制,最低都是二进制),最后计算所得的整数数值即可
#include <stdio.h>
int main()
{
int T,t;scanf("%d",&T);
for(t=0;t<T;t++)
{
char s[62],*p=s;
scanf("%s",&s);
int inf[128],N=0;//ACII共128位
for(int i=0;i<128;i++)inf[i]=-1;//初始化
inf[*p]=1;//第一种字符值为1
while(*++p)
{
if(inf[*p]==-1)
{
inf[*p]=N;
N=N ? N+1 : 2;
}
}
if(N<2)N=2;//只有一种字符也为2进制
long long ans=0;
p = s;
while(*p)
{
ans=ans*N+inf[*p++];
}
printf("case #%d:\n%lld\n",t,ans);
}
return 0;
}