神秘信息

C. 神秘信息
单点时限: 2.0 sec

内存限制: 256 MB

未来的某一天,人类登陆火星。在火星上发现一组由各种符号表示的神秘信息。研究发现:每种符号表示一个数码,神秘信息是一个整数。但是不知道每个符号表示的是哪个数码,也不知道它是几进制数 (只知道不可能是一进制),但知道相同的符号表示相同的数码,不同的符号表示不同的数码。

符号总计有 62 种,为方便起见,每种符号分别用大小写英文字母和数字 0-9 表示。

现在我们想要知道神秘信息表示的最小整数值。

例如 :

11001001 最小整数值和人类的二进制数一样,为 201;

cats 最小整数值为 75(设是 4 进制数,c 表示 1,a 表示 0,t 表示 2,s 表示 3);

pig 最小整数值为 11(设是 3 进制数,p 表示 1,i 表示 0,g 表示 2)。

注意:神秘信息表示的数必须是有意义的,第一位不能为 0。

输入格式
第 1 行:整数 () 为问题数。

第 2 行:第一个问题的数据。一个字符串表示的神秘信息,长度范围为 [1,60]。

第 3 ∽ T+1 行:后面问题的数据,格式与第一个问题相同。

输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),然后在一行中输出神秘信息表示的最小整数值(输入数据保证输出的整数不超过 1018)。

样例
input
3
11001001
cats
zig
output
case #0:
201
case #1:
75
case #2:
11

#include<iostream>
#include<map>
#include<string>
using namespace std;

int main()
{
    int T;
    cin>>T;
    for(int cas=0;cas<T;cas++)
    {
        string str;
        map<char,int> a;
        int R=0;
        cin>>str;
        int len=str.length();
        a.clear();//删除所有元素
        a[str[0]]=1;
        for(int j=0;j<len;j++)
        {
            if(a.find(str[j])==a.end())
            {
                a[str[j]]=R;
                R=R?R+1:2;//******
            }
        }
        if(R<2) R=2;

        long long N=0;
        for(int j=0;j<len;j++)
        {
            N*=R;
            N+=a[str[j]];
        }
        cout<<"case #"<<cas<<":"<<endl<<N<<endl;
    }
    return 0;
}

题目理解错误
输入:777 -> 输出:7 (数字只是字符,并不具备本身的值)

①、c语言可以用字符数组代替map:字符的ACSII码为下标,其中存储的元素为值

②、c中字符数组与c++中string区别:
char a[100];
string s;
string // 这个头文件是C++的标准库中的string类型的头文件
string.h//这个头文件是c标准库中的字符串函数声明头文件。 在C++中一般用 cstring 头文件来代替。
获取长度:len = strlen(a);
len = s.length();
len = strlen(s.c_str());

③、map定义好后,mapname.clear() -> 清空元素,长度为0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值