【Python数据结构与算法】枚举----奥数问题

举报
是Dream呀 发表于 2024/08/28 22:12:42 2024/08/28
【摘要】 【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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。