鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

[技术交流] Python:每日一题 151

[复制链接]
发表于 2018-2-13 23:49:00 | 显示全部楼层
import itertools
list1=list(itertools.permutations([0,1,2,3,4,5,6,7,8]))
for l in list1:
    if l[0]<l[1]<l[2] and l[3]<l[4]<l[5] and l[6]<l[7]<l[8]:
        if l[0]<l[3]<l[6] and l[1]<l[4]<l[7] and l[2]<l[5]<l[8]:
            if l[1]<l[5] and l[0]<l[4]<l[8] and l[3]<l[7]:
                if l[1]<l[3] and l[2]<l[4]<l[6] and l[5]<l[7]:
                    print l[0],l[1],l[2]
                    print l[3],l[4],l[5]
                    print l[6],l[7],l[8]
                    print '++++++'

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-14 10:16:28 | 显示全部楼层
  1. from itertools import permutations


  2. def generate():
  3.     perms = permutations(range(9),9)
  4.     for each in perms:
  5.         yield([list(each[0:3]),list(each[3:6]),list(each[6:9])])


  6. for m in generate():
  7.     A = B = 1
  8.     C = D = 0
  9.     for i in range(3):
  10.         if [m[i][0],m[i][1],m[i][2]] == sorted([m[i][0],m[i][1],m[i][2]]):
  11.             A *= A
  12.         else:
  13.             A *= 0
  14.         if [m[0][i],m[1][i],m[2][i]] == sorted([m[0][i],m[1][i],m[2][i]]):
  15.             B *= B
  16.         else:
  17.             B *= 0
  18.     if (m[0][1] < m[1][2]) and([m[0][0],m[1][1],m[2][2]] == sorted([m[0][0],m[1][1],m[2][2]])) and(m[1][0] < m[2][1]):
  19.         C = 1
  20.     if (m[0][1] < m[1][0]) and([m[0][2],m[1][1],m[2][0]] == sorted([m[0][2],m[1][1],m[2][0]])) and(m[1][2] < m[2][1]):
  21.         D = 1
  22.     if A and B and C and D:
  23.         for each_line in m:
  24.             print(each_line)
  25.         print('-'*10)
复制代码


  1. [0, 1, 2]
  2. [3, 4, 5]
  3. [6, 7, 8]
  4. ----------
  5. [0, 1, 2]
  6. [3, 4, 6]
  7. [5, 7, 8]
  8. ----------
  9. [0, 1, 3]
  10. [2, 4, 5]
  11. [6, 7, 8]
  12. ----------
  13. [0, 1, 3]
  14. [2, 4, 6]
  15. [5, 7, 8]
  16. ----------
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-17 11:57:16 | 显示全部楼层
  1. import itertools

  2. numList = list(itertools.permutations(range(9)))

  3. for n in numList:
  4.     if n[0] < n[1] < n[2] and n[3] < n[4] < n[5] and n[6] < n[7] < n[8] and \
  5.        n[0] < n[3] < n[6] and n[1] < n[4] < n[7] and n[2] < n[5] < n[8] and \
  6.        n[0] < n[4] < n[8] and n[1] < n[5] and n[3] < n[7] and \
  7.        n[2] < n[4] < n[6] and n[1] < n[3] and n[5] < n[7]:
  8.         print(*n[:3])
  9.         print(*n[3:6])
  10.         print(*n[6:9])
  11.         print('-' * 5)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-26 09:15:17 From FishC Mobile | 显示全部楼层
p = range(0,9)
for a in p:
for b in p:
  if b!=a:
   for c in p:
    if a!=c!=b:
     for d in p:
      if a!=d!=b and d!=c:
       for e in p:
        if a!=e!=b and c!=e!=d:
         for f in p:
          if b!=f!=a and c!=f!=d\
and f!=e:
           for g in p:
            if a!=g!=b and c!=g!=d and e!=g!=f:
             for h in p:
              if a!=h!=b and c!=h!=d and \
e!=h!=f and g!=h:
               for i in p:
                if b-a==c-b == e-d==f-e\
==h-g == i-h and d-a == g-d ==\
e-b == h-e == f-c == i-f and \
e-a == i-e == h-d == f-b and \
d - b == h-f == e - c == g - e :
                 print(a,'\t',b,'\t',c)
                 print(d,'\t',e,'\t',f)
                 print(g,'\t',h,'\t',i)
                 print('---------大大的分割线----------')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-6 11:34:13 From FishC Mobile | 显示全部楼层
先分析,根据题目要求,列出不等式
其中数字代表位置,不代表数值
0<1<2,3<4<5,6<7<8,0<3<6,1<4<72<5<8,1<5,3<7,0<4<8,1<3,5<7,2<4<6,
合并不等式,得到
0<1<2.3<4<5.6<7<8
很明显,2.3和5.6位置的数字可以互换,所以结果有4种。

def main(numb):
    def mforpri(n):
        for i in range(0,7,3):
            print(n[i:i+3])
        print()
            
    def cal(xl,pri=''):#设计递归,打印所有的可能排列
        for te in range(len(xl)):
            if len(xl[te])>1:
                cal(xl[te+1:],pri+xl[te])
                cal(xl[te+1:],pri+xl[te][::-1])
                return
            pri+=xl[te]
        mforpri(pri)#按格式打印
    cal(numb)
main('0 1 23 4 56 7 8'.split(' '))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-12 23:17:23 | 显示全部楼层

大佬,能说一下你代码的意思嘛,萌新表示没看懂,但是你的答案是正确的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-13 08:30:20 From FishC Mobile | 显示全部楼层
fan1993423 发表于 2018-3-12 23:17
大佬,能说一下你代码的意思嘛,萌新表示没看懂,但是你的答案是正确的。

思考本题的数学逻辑,只有两组位置可以交换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-13 10:23:54 | 显示全部楼层
BngThea 发表于 2018-3-13 08:30
思考本题的数学逻辑,只有两组位置可以交换

还是没怎么看懂,只好请你详细解释一下了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-13 10:42:56 | 显示全部楼层
fan1993423 发表于 2018-3-13 10:23
还是没怎么看懂,只好请你详细解释一下了

只有23号和67号可以互换位置满足题设
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-9 12:27:48 | 显示全部楼层
冰封雪舞 发表于 2018-2-9 10:26
进过反复推敲,因为只有0-8这9个数字,因为只有9个数字,所以你每一行只要随便换一个数字位置,第二幅图片 ...

既然都出题了,就肯定还有其他的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-1 20:54:00 | 显示全部楼层
塔利班 发表于 2018-2-9 17:12
首先说下我的代码好蠢,是无脑流,前半部分是生成所有可能的列表组合,我应该是把内存搞出存贮边界了,因为 ...

参照上边大头目的答案,跟你完全一个思路,但是很直接很暴力很简洁,你这样貌似给内存白白加了很多东西,不过比我厉害多了,我碰到矩阵这类的东西,直接瞎菜了,只能等公布答案el。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 00:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表