zoukankan      html  css  js  c++  java
  • python基础===一道小学奥数题的解法

    今早在博客园和大家分享了一道昨晚微博中看到的小学奥数题,后来有朋友给出了答案。然后我尝试用python解答它。

    原题是这样的:

    数学题:好事好 + 要做好 = 要做好事,求 “好、事、做、要”的值分别是多少?

    以下解题思路:

    list1=[0,1,2,3,4,5,6,7,8,9]
    
    for h  in list1:
    
       for s in list1:
    
           for z in list1:
    
                for y in list1:
    
                   if (h*100+s*10+h)+(y*100+z*10+h)==(y*1000+z*100+h*10+s):
    
                       print(h,s,y,z)

    思路二:

    def func(i):
       # 可以把h(好),s(事),z(做),y(要)看作是0000-9999的千、百、十、个位数。
       h, s, z, y = f'{i:04d}'
       # 按照汉字的顺序重新排列变量
       if  int(f'{h}{s}{h}') + int(f'{y}{z}{h}') == int(f'{y}{z}{h}{s}'):
           print(h, s, z, y)
    
    #遍历0000-9999        
    for i in range(10000):
        func(i)
    
    

    f‘{i}’是把整数i转换成一个字符串,:04d是用0补齐四位。然后把这四位数分别赋值给h,s,z,y,这里用了一个解包的技巧,其他语言最少要写四行。

    from itertools import product
    print [(x, y, z, f) for (x, y, z, f) in product(*[range(10)] * 4) if (z * 100 + f * 10 + z) + (x * 100 + y * 10 + z) == (x * 1000 + y * 100 + z * 10 + f)]

    思路三:

    把问题看成三位数(101-989)加三位数等于四位数,然后通过位数分解这样只需要两重循环。

  • 相关阅读:
    Splunk_转发器配置_AD
    Splunk SPL 时间转换
    Splunk_索引自动清理历史数据
    Python 备查 线程池
    Splunk_SPL 排除搜索结果
    Splunk_SPL 查询时间范围
    质量的分级
    各类BOM
    Jmeter负载测试的注意事项
    MEM的面试记录
  • 原文地址:https://www.cnblogs.com/botoo/p/7568204.html
Copyright © 2011-2022 走看看