最大映射(今日头条2017笔试)

开始刷笔试题了~
先放题→→
有 n 个字符串,每个字符串都是由 A-J 的大写字符构成。现在你将每个字符映射为一个 0-9 的数字,不同字符映射为不同的数字。这样每个字符串就可以看做一个整数,唯一的要求是这些整数必须是正整数且它们的字符串不能有前导零。现在问你怎样映射字符才能使得这些字符串表示的整数之和最大?
输入描述:
每组测试用例仅包含一组数据,每组数据第一行为一个正整数 n , 接下来有 n 行,每行一个长度不超过 12 且仅包含大写字母 A-J 的字符串。 n 不大于 50,且至少存在一个字符不是任何字符串的首字母。
输出描述:
输出一个数,表示最大和是多少。
输入例子1:
2
ABC
BCA
输出例子1:
1875

终于开始试着用python写这种代码了

#-*-coding:,utf-8-*-
num = {'A':0, 'B':0, 'C':0, 'D':0, 'E':0, 'F':0, 'G':0, 'H':0, 'I':0, 'J':0}
iin=eval(input())
in_str=[]
num2s = []
for i in range(iin):
    in_str.append(input())
#计算字母权值,根据权值判断字母应对应的数字
for str in in_str:
    x = len(str)-1
    for alp in str:
        if alp == 'A':
            num['A'] = num['A']+10**x
        elif alp == 'B':
            num['B'] = num['B']+10**x
        elif alp == 'C':
            num['C'] = num['C']+10**x
        elif alp == 'D':
            num['D'] = num['D']+10**x
        elif alp == 'E':
            num['E'] = num['E']+10**x
        elif alp == 'F':
            num['F'] = num['F']+10**x
        elif alp == 'G':
            num['G'] = num['G']+10**x
        elif alp == 'H':
            num['H'] = num['H']+10**x
        elif alp == 'I':
            num['I'] = num['I']+10**x
        elif alp == 'J':
            num['J'] = num['J']+10**x
        x=x-1
#按照权值排序
for i,j in sorted(num.items(),key=lambda ite:ite[1]):
    num2s.append(i)
print(num2s)
sum = 0
#求出总和
for str in in_str:
    x = len(str)-1
    one_n = 0
    #求单个字符串的值,用index()查找字母在列表中的位置序号转换为数字
    for alp in str:
        one_n=one_n+(num2s.index(alp))*10**x
        x=x-1
    print(one_n)
    sum=sum+one_n
print(sum)

写了半天终于弄出来放上去测试结果提示有问题orz

您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为85.00%

测试用例:
50
IAAAHAHCJGBJ
FAAABCABGIFF
FABBJIAGICCG
CAJEAIHBCFIF
CAEBJCGFEEJC
JAJEFADFHHDH
FAFCEDDGBIIH
EACHGBAJJICF
CACECDFDBFFC
BAJADCBDDDCE
JAEFEDICECGH
FAAHGHABHFIC
CAIIAJDHBCDJ
FAIHHJGDEBHA
DAFCHCCDIIDG
HAHAHIIGADGI
IAJECCIDJABD
EACFDDDCCBBA
IAFJFIDFEDGG
IAGIJBIGDIFB
DAFHBFCBJGDB
EACIBEIEGHAH
FAJDHJBIBBCC
BABIACEFHGDJ
JAEAHBABBDIB
FAHJCEAFHHAF
DAHAFCBAJCHE
IAEFCFCIJBBA
FAGEIEJFGGIH
CADBHGCGAJCA
EAJHGGGCCBBC
GAHFEHFHIJAI
CAADICHAJACG
CADFFHIHFCAF
EAIFFIFHAJGI
IAICCJIACEDE
CABJIBGECJEA
DAFGIEFBDGDG
FACDAIIJCJJF
BAAJHJFIHGHD
BAIDCEABEHDD
JAGHGICFHDAI
GACBGJBEJCAJ
GAJDEDBGGFJF
DAHAFEHEJHJD
JAJDEDGJBCBI
CAFGFJEIGFAI
CAHGDEDACGDI
CABACDGJDJHJ
EAFAIDAAFAAI

对应输出应该为:

31563768760690

你的输出为:

32270430830783

暂时没检查出来问题,既然我输出的数更大,应该是答案错了?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值