1004神秘信息

本题的关键在于分析题目时逻辑要清晰,要想找到神秘信息表示的最小整数,那么首先要是最小的进制且第一种字符对应数为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;
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值