设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 4320|回复: 9
打印 上一主题 下一主题

一个计算练习题

[复制链接]

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2017-12-20 16:43:05 |只看该作者 |倒序浏览
本帖最后由 TED 于 2017-12-20 18:31 编辑

刚在微信群里看到的题目,贴在这里,有兴趣的欢迎解答:
1220题目.jpg
为了方便检查结果,假设各字母代表的整数不同吧~



回复

使用道具 举报

1

主题

0

好友

55

积分

实习版主

Rank: 7Rank: 7Rank: 7

沙发
发表于 2017-12-28 11:09:36 |只看该作者
# -*- coding:utf-8 -*-
import random
import time
list=[0,1,2,3,4,5,6,7,8,9]
start_time=time.time()
while True:
    slice = random.sample(list, 8)
    s, e, n, d, m, o, r, y = slice
    if s!=0 and m!=0:
        if (s*1000+e*100+n*10+d)+(m*1000+o*100+r*10+e)==(m*10000+o*1000+n*100+e*10+y):
            print s,e,n,d,m,o,r,y
            break
end_time=time.time()
print 'time=%.2fsecs'%(end_time-start_time)
回复

使用道具 举报

1

主题

0

好友

55

积分

实习版主

Rank: 7Rank: 7Rank: 7

板凳
发表于 2017-12-28 11:11:44 |只看该作者
谢谢老铁,顶你!
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

地板
发表于 2017-12-28 13:29:30 |只看该作者
散不开暧昧 发表于 2017-12-28 11:09
# -*- coding:utf-8 -*-
import random
import time

用随机的话,假设结果不止一种,怎么全列出来
回复

使用道具 举报

1

主题

0

好友

55

积分

实习版主

Rank: 7Rank: 7Rank: 7

5#
发表于 2017-12-28 13:49:54 |只看该作者
TED 发表于 2017-12-28 13:29
用随机的话,假设结果不止一种,怎么全列出来

如果m!=0,就这一种答案吧,把break去掉,不停的循环,都是一种答案。
如果m可以0-9,那把‘if s!=0 and m!=0’和break去掉,让不停的循环,得出所有答案。只不过中间会重复答案。
这个时候就得再增加保存语句,每次得出的一个答案,保存到一个文件,后续得出的答案,先判断是否已经存在,如果不存在,就增加进去,直到随机得出所有答案,跳出循环,最后把保存的文件读出来,打印就可以了。
老铁,觉得呢?
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

6#
发表于 2017-12-28 14:46:37 |只看该作者
散不开暧昧 发表于 2017-12-28 13:49
如果m!=0,就这一种答案吧,把break去掉,不停的循环,都是一种答案。
如果m可以0-9,那把‘if s!=0 and m! ...

感觉随机 计算量 会不会太大啊
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

7#
发表于 2017-12-28 15:07:46 |只看该作者
散不开暧昧 发表于 2017-12-28 13:49
如果m!=0,就这一种答案吧,把break去掉,不停的循环,都是一种答案。
如果m可以0-9,那把‘if s!=0 and m! ...

感觉随机比并不能列举出所有情况,试试能不能把random换掉,还尽量代码能这么简练?
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

8#
发表于 2018-1-17 13:27:42 |只看该作者
  1. from itertools import permutations

  2. def main():
  3.     for s,e,n,d,m,o,r,y in permutations(range(10),8):
  4.         send = 1000*s + 100*e + 10*n + d
  5.         more = 1000*m + 100*o + 10*r + e
  6.         money = 10000*m + 1000*o + 100*n + 10*e + y
  7.         if m!=0 and send + more == money:
  8.             print(send,more,money)
  9.             
  10. main()
复制代码
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

9#
发表于 2018-1-19 18:02:31 |只看该作者
红薯 发表于 2018-1-17 13:27

厉害了,原来permutations能实现全排列的算法,这么一来真的蛮简洁了 ~ 又学了一手,谢谢!
回复

使用道具 举报

1

主题

0

好友

55

积分

实习版主

Rank: 7Rank: 7Rank: 7

10#
发表于 2018-1-25 14:50:04 |只看该作者
红薯 发表于 2018-1-17 13:27

厉害,学习了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-20 13:06 , Processed in 0.029590 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部