免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7433 | 回复: 15
打印 上一主题 下一主题

如何用python解这道题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-15 14:50 |只看该作者 |倒序浏览
本帖最后由 luoyonghao 于 2014-10-15 16:02 编辑

a-b=c
d/e=f
g+h=i
c*f=i  
这几个字母是1-9 9个数字 9个数字各不相等 用python算出来 要怎么写?

论坛徽章:
21
白羊座
日期:2013-08-23 15:49:17金牛座
日期:2013-10-08 17:00:03处女座
日期:2013-10-12 11:54:11CU十二周年纪念徽章
日期:2013-10-24 15:41:34午马
日期:2013-11-27 14:07:21巨蟹座
日期:2013-12-04 10:56:03水瓶座
日期:2013-12-04 15:58:00亥猪
日期:2014-05-24 16:02:3115-16赛季CBA联赛之辽宁
日期:2016-11-07 13:52:53戌狗
日期:2013-08-23 16:15:31白羊座
日期:2013-08-24 21:59:24巨蟹座
日期:2013-08-25 16:34:24
2 [报告]
发表于 2014-10-15 15:33 |只看该作者
本帖最后由 zongg 于 2014-10-15 18:16 编辑


我是新手,感觉写的太屌丝了,


楼下才是大神,,

论坛徽章:
0
3 [报告]
发表于 2014-10-15 16:02 |只看该作者
zongg 发表于 2014-10-15 15:33
a is: 2
b is: 1
c is: 1


哈哈 我也这么写了一次  题目我发错了 9个数字不能相同 所以还要加上a!=b....  求大神用优雅的办法搞定!!!

论坛徽章:
0
4 [报告]
发表于 2014-10-15 17:04 |只看该作者
本帖最后由 Hadron74 于 2015-02-02 17:05 编辑
  1. def func(n):       
  2.         return n[0]-n[1] == n[2] and n[3]/n[4] == n[5] and n[6]+n[7] == n[8] and n[2]*n[5] == n[8]        
  3. def print_num(numbers):
  4.         for i,s in zip(numbers,"abcdefghi"):
  5.                 print "{}\t{}".format(s,i)
  6. import itertools
  7. s=0
  8. for n in itertools.permutations(range(1,10)):
  9.         if func(n):
  10.                 s += 1
  11.                 print "-"*10+"Solution ",s
  12.                 print_num(n)
复制代码

论坛徽章:
21
白羊座
日期:2013-08-23 15:49:17金牛座
日期:2013-10-08 17:00:03处女座
日期:2013-10-12 11:54:11CU十二周年纪念徽章
日期:2013-10-24 15:41:34午马
日期:2013-11-27 14:07:21巨蟹座
日期:2013-12-04 10:56:03水瓶座
日期:2013-12-04 15:58:00亥猪
日期:2014-05-24 16:02:3115-16赛季CBA联赛之辽宁
日期:2016-11-07 13:52:53戌狗
日期:2013-08-23 16:15:31白羊座
日期:2013-08-24 21:59:24巨蟹座
日期:2013-08-25 16:34:24
5 [报告]
发表于 2014-10-15 18:25 |只看该作者
回复 4# Hadron74


    好厉害,,, 我想了好久也没想出来。

论坛徽章:
0
6 [报告]
发表于 2014-10-15 20:07 |只看该作者
回复 4# Hadron74


    受教了,多谢

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
7 [报告]
发表于 2014-10-16 12:00 |只看该作者
回复 4# Hadron74


     学习了 看来 要多熟悉下itertools

论坛徽章:
0
8 [报告]
发表于 2014-10-21 16:06 |只看该作者
学习了,真是没思路

论坛徽章:
0
9 [报告]
发表于 2015-02-02 16:02 |只看该作者
  1. def ALL(Selected, Selecting):
  2.     for i in range(len(Selecting)):
  3.         Selected.append(Selecting[i])
  4.         Next = Selecting[:i]+Selecting[i+1:]
  5.         if Next:
  6.             [i for i in ALL(Selected,Next)]
  7.         else:
  8.             if ((Selected[0]-Selected[1] == Selected[2]) and (Selected[3]/Selected[4]==Selected[5] and Selected[3]%Selected[4]==0) and (Selected[6]+Selected[7] == Selected[8]) and (Selected[2]*Selected[5] == Selected[8])):
  9.                 print "%s "*9 % tuple([chr(65+i)+"="+str(Selected[i]) for i in range(len(Selected))])
  10.             yield Selected
  11.         Selected.pop()
  12. [i for i in ALL([],range(1,10))]
复制代码
嗯我随手写了一下……话说为啥不用递归……N!总比N^N好吧-,-

论坛徽章:
0
10 [报告]
发表于 2015-02-02 17:34 |只看该作者
本帖最后由 Hadron74 于 2015-02-02 18:53 编辑

回复 9# mmjjddqq

貌似你的程序里还是用了递归的。要重新发明轮子么,不用Python的库,当然可以产生全排列。
  1. def ALL(n,k):
  2.     if (k==len(n)-1 and n[0]-n[1] == n[2] and n[3]/n[4] == n[5] and n[6]+n[7] == n[8] and n[2]*n[5] == n[8]):
  3.         print "%s "*9 % tuple(n)
  4.         return
  5.     for i in range(k,len(n)):
  6.         n[k],n[i] = n[i],n[k]
  7.         ALL(n,k+1)
  8.         n[k],n[i] = n[i],n[k]
  9. ALL(list(range(1,10)),0)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP