【Python数据结构与算法】枚举----奥数问题
【摘要】 【Python数据结构与算法】枚举----奥数问题
题目:奥数问题
描述
用数字’0’–‘9’替换字母’A’- ‘E’,使得类似于下面形式的等式成立:
ABC + ACDE = DCABC
同一字母必须用同一数字替换,不同字母必须用不同数字替换。如果无解,则输出“No Solution”。替换后产生的数不能有前导0,比如“012”,是不允许出现的。对每个等式,要求输出替换为字母后的等式。如果有多个解,要输出最小的解。两个解比大小,哪个解字母’A’表示的数小就算小;字母’A’表示的数相同,则比较字母’B’表示的数…如果无解,则输出"No Solution"。
输入
输入数据第一行是整数n,代表有n个等式要求解;接下来每行是一个等式,由三个字符串s1、s2、s3组成,等式就是s1+s2=s3。每个字符串长度最多10个字符,只会包含’A’- 'E’这五个字母。
输出
对每个等式,输出替换后的结果
样例输入
5
A A B
AA AA AAA
AB ABC ACDD
A A BC
ABCD BCD ACEA
样例输出
1+1=2
No Solution
No Solution
5+5=10
2371+371=2742
AC代码
def count(s1,s2,s3):
a = [0] * 5
def toInt(s):
result = ""
for c in s:
result += chr(ord('0') + a[ord(c) - ord('A')])
if len(result) > 1 and result[0] == '0':
return -1
return int(result)
def enum(i):
if i == 5:
st = set(a)
if len(st) == 5:
n1, n2, n3 = toInt(s1), toInt(s2), toInt(s3)
if n1 >= 0 and n2 >= 0 and n3 >= 0 and n1 + n2 == n3:
print(f"{n1}+{n2}={n3}")
return True
else:
for k in range(10):
a[i] = k
if enum(i+1) :
return True
return False
return enum(0)
n = int(input())
for i in range(n):
s1,s2,s3 = input().split()
if not count(s1,s2,s3):
print("No Solution")
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)