鱼C论坛

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

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

[复制链接]
发表于 2018-2-10 23:24:49 | 显示全部楼层
可以暴力破解吗,我只会暴力破解
  1. a = [0,0,0,0,0,0,0,0,0]

  2. for i in range(9):
  3.         a[0]=i
  4.         for i in range(9):
  5.                 a[1]=i
  6.                 for i in range(9):
  7.                         a[2]=i
  8.                         for i in range(9):
  9.                                 a[3]=i
  10.                                 for i in range(9):
  11.                                         a[4]=i
  12.                                         for i in range(9):
  13.                                                 a[5]=i
  14.                                                 for i in range(9):
  15.                                                         a[6]=i
  16.                                                         for i in range(9):
  17.                                                                 a[7]=i
  18.                                                                 for i in range(9):
  19.                                                                         a[8]=i
  20.                                                                         if len(a)==len(set(a)):
  21.                                                                                         if a[0]<a[1]<a[2] and a[3]<a[4]<a[5] and a[6]<a[7]<a[8]:
  22.                                                                                                 if a[0]<a[3]<a[6] and a[1]<a[4]<a[7] and a[2]<a[5]<a[8]:
  23.                                                                                                         if a[0]<a[4]<a[8] and a[1]<a[5] and a[3]<a[7]:
  24.                                                                                                                 if a[2]<a[4]<a[6] and a[1]<a[3] and a[5]<a[7]:
  25.                                                                                                                         print(a[0],a[1],a[2])
  26.                                                                                                                         print(a[3],a[4],a[5])
  27.                                                                                                                         print(a[6],a[7],a[8],"\n")
复制代码

草图.png

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-11 00:10:27 | 显示全部楼层
本帖最后由 天圆突破 于 2018-2-11 08:57 编辑
  1. '''
  2. 使用列表来存储信息
  3. lst[0]  lst[1]  lst[2]
  4. lst[3]  lst[4]  lst[5]
  5. lst[6]  lst[7]  lst[8]

  6. 规则写成条件:
  7. lst[0] < lst[1] < lst[2] and lst[3] < lst[4] < lst[5] and lst[6] < lst[7] < lst[8] and lst[0] < lst[3] < lst[6] and lst[1] < lst[4] < lst[7] and lst[2] < lst[5] < lst[8] and lst[0] < lst[4] < lst[8] and lst[3] < lst[7] and lst[1] < lst[5] and lst[2] < lst[4] < lst[6] and lst[1] < lst[3] and lst[5] < lst[7]

  8. 算法分析:
  9. 0一定要在lst[0],因为没有比0更小的数字
  10. 8一定要在lst[8],以为没有比8更大的数字
  11. 1一定要在lst[1],因为这个位置必须是第二小的位置(其他位置都要有一个除了0以外比它小的数字)
  12. 7一定要在lst[7],因为这个位置必须是第二大的位置(其他位置都要有一个除了8以外比它大的数字)
  13. 以上四个位置在任何时候必须固定

  14. 数字2有两种情况,lst[2]和lst[3],在其他任何位置都会违反规则(易证,略)
  15. 数字6有两种情况,lst[5]和lst[6],在其他任何位置都会违反规则(易证,略)

  16. 以上固定了:lst = [0, 1, x, x, x, ,x ,x ,7 ,8]
  17. 因为数字2有2种情况,数字6有两种情况,合计4个分支
  18. 再需要判断3、4、5即可,一共只有2*2*6=24情况,交给程序验证
  19. 剩下的就是打字的体力活了
  20. 算法分析结束
  21. '''
  22. def middle(lst_temp):
  23.     temp = [3, 4, 5]
  24.     temp1 = [(i, j, k) for i in temp for j in temp for k in temp if i != j and j != k and i != k]
  25.     flag =  [x for x in range(8) if lst_temp[x] == None]
  26.     for each in temp1:
  27.         lst = lst_temp.copy()
  28.         lst[flag[0]], lst[flag[1]], lst[flag[2]] = each
  29.         if lst[0] < lst[1] < lst[2] and lst[3] < lst[4] < lst[5] and lst[6] < lst[7] < lst[8] and lst[0] < lst[3] < lst[6] and lst[1] < lst[4] < lst[7] and lst[2] < lst[5] < lst[8] and lst[0] < lst[4] < lst[8] and lst[3] < lst[7] and lst[1] < lst[5] and lst[2] < lst[4] < lst[6] and lst[1] < lst[3] and lst[6] < lst[7]:
  30.             print('%d %d %d\n%d %d %d\n%d %d %d'%tuple(lst))
  31.             print('*'*5)

  32. def case6(lst):
  33.     for i in range(2):
  34.         if i == 0:
  35.             lst_temp = lst.copy()
  36.             lst_temp[6] = 6
  37.             middle(lst_temp)
  38.         elif i == 1:
  39.             lst_temp = lst.copy()
  40.             lst_temp[5] = 6
  41.             middle(lst_temp)

  42. def nine():
  43.     lst = [None for i in range(9)]
  44.     lst[0] = 0; lst[1] = 1; lst[7] = 7; lst[8] = 8
  45.     for i in range(2):
  46.         if i == 0:
  47.             lst_temp = lst.copy()
  48.             lst_temp[2] = 2
  49.             case6(lst_temp)
  50.         if i == 1:
  51.             lst_temp = lst.copy()
  52.             lst_temp[3] = 2
  53.             case6(lst_temp)

  54. if __name__ == '__main__':
  55.     nine()
复制代码

jiugongge.jpg

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-11 19:55:29 | 显示全部楼层
for a1 in range(9):
     for a2 in range(9):
         for a3 in range(9):
             for a4 in range(9):
                 for a5 in range(9):
                     for a6 in range(9):
                         for a7 in range(9):
                             for a8 in range(9):
                                 for a9 in range(9):
                                    if (a1<a2)and(a2<a3)and(a4<a5)and(a5<a6)\
and(a7<a8)and(a8<a9)and(a1<a4)and(a4<a7)and(a2<a5)and(a5<a8)and(a3<a6)and(a6<a9)\
and(a1<a5)and(a5<a9)and(a2<a6)and(a4<a8)and(a2<a4)and(a3<a5)and(a5<a7)and(a6<a8)\
and(a3!=a4)and(a6!=a7):
                                        print(a1,a2,a3)
                                        print(a4,a5,a6)
                                        print(a7,a8,a9)
                                        print('=============')
                                    
                                    
      

评分

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

查看全部评分

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

使用道具 举报

发表于 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-26 19:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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