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)加三位数等于四位数,然后通过位数分解这样只需要两重循环。

  • 相关阅读:
    CPU Cache与缓存行
    linux 查看命令总结
    idea自个常用工具的总结
    《人月神话》
    啊哈,翻转
    Scrapy爬虫之豆瓣TOP250
    87的100次幂除以7的余数是多少
    python之sqlite3 用法详解
    Sublime Text 3 插件SublimeLinter/PEP8安装&配置,检查代码规范
    urlparse之urljoin() 爬虫必备
  • 原文地址:https://www.cnblogs.com/botoo/p/7568204.html
Copyright © 2011-2022 走看看