鱼C论坛

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

[已解决]征集答案,我只写出一半,还是硬编码

[复制链接]
发表于 2020-2-16 22:08:33 | 显示全部楼层
wp231957 发表于 2020-2-16 21:57
感觉和八楼代码差不多,他的代码那重复的可是很多

我写的时候copy了8楼的命名和初始化值,思路是完全不一样的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-16 22:34:37 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2020-2-16 22:38 编辑
wp231957 发表于 2020-2-16 21:16
你这重复的  还真多啊 ???


我知道为什么会重复这么多了,我有个值写的不对,导致了无限循环。这次我自己验证了,没有重复项。
P.S.我把生成器的生成类型改成了字符串,将结果的总数减去集合化的总数,相差为0
得到结果为 117649 得到结果比之前还多口牙!
  1. def create():
  2.     ns = (1,3,5,7,1/1,1/3,1/5,1/7)
  3.     res = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
  4.     n = [0]*6
  5.     le = len(ns)
  6.     poss = ((1,0),(2,0),(2,1),(3,0),(3,1),(3,2))
  7.     while n[0]<le:
  8.         for i in range(6):
  9.             res[poss[i][0]][poss[i][1]] = ns[n[i]]
  10.             res[poss[i][1]][poss[i][0]] = ns[n[i]-4]
  11.         yield str(res)
  12.         n[i] += 1
  13.         while i and le<=n[i]:#就是这里的判断条件
  14.             n[i] = 0
  15.             i -= 1
  16.             n[i] += 1
  17.         else:
  18.             if n[i]==4:n[i]+=1
  19. if __name__ == '__main__':
  20.     g = list(create())
  21.     lg = len(g)
  22.     print(lg,lg-len(set(g)))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
wp231957 + 3 + 5 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-16 23:01:24 From FishC Mobile | 显示全部楼层
阴阳神万物主 发表于 2020-2-16 22:34
我知道为什么会重复这么多了,我有个值写的不对,导致了无限循环。这次我自己验证了,没有重复项。
P. ...

那你和18楼是一样的了,我是指结果
都是7**6
说实话,我还是不相信会有这么多的组合
我明天一定要验证一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-16 23:18:38 | 显示全部楼层
wp231957 发表于 2020-2-16 23:01
那你和18楼是一样的了,我是指结果
都是7**6
说实话,我还是不相信会有这么多的组合

加油,我说说我对这个数字的看法:
总共 16 个点,其中 4 个一定是  1 ,剩下 12 个有一半是随着对称点的变化而变化,于是只剩了 6 个点是自由的变化,每一个点都是有(1, 3, 5, 7, 1/3, 1/5, 1/7)这 7 种选择,根据分步求积的计数原理可得,不同组合的总数为 7*7*7*7*7*7*7,即 7**6

我猜楼主的推算过程的算式为 (4**6)*2
但这种情况是把 (3, 5, 7) 这 3 个数限制在了 主对角线 的同一侧,但是明明还有相对 主对角线 3 在左 5 在右,等情况。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-17 09:04:37 | 显示全部楼层
xdhuch 发表于 2020-2-16 21:40
用代码实现了下,分析在9楼,你检查一下吧
  1. import itertools

  2. def Traversal_4_4():
  3.     ns   = (1,3,5,7,1/3,1/5,1/7)
  4.     res  = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
  5.     poss = ((1,0),(2,0),(2,1),(3,0),(3,1),(3,2))
  6.     s=[]
  7.     for arr in itertools.product(ns, repeat=6):
  8.         for i in range(6):
  9.             res[poss[i][0]][poss[i][1]] = round(arr[i], 4)
  10.             res[poss[i][1]][poss[i][0]] = round(1/arr[i], 4)           
  11.         s.append(res)
  12.     return s
  13.    

  14. if __name__ == '__main__' :
  15.     t=Traversal_4_4()
  16.     for x in t:
  17.        print(x)
复制代码


没想通这个代码 和你的有啥区别,这个运行和你的不一样,也是错的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 10:04:47 | 显示全部楼层
本帖最后由 xdhuch 于 2020-2-17 10:15 编辑
wp231957 发表于 2020-2-17 09:04
没想通这个代码 和你的有啥区别,这个运行和你的不一样,也是错的


你修改我的代码的时候用到了list拷贝,这里有个陷阱就是你直接循环使用res进行拷贝,当res中的值变化时,会刷新list中的值,导致list中的值都是重复的。

只需改两行,就可以了:

  1. import itertools

  2. def Traversal_4_4():
  3.     ns   = (1,3,5,7,1/3,1/5,1/7)
  4.     #res  = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
  5.     poss = ((1,0),(2,0),(2,1),(3,0),(3,1),(3,2))
  6.     s=[]
  7.     for arr in itertools.product(ns, repeat=6):
  8.         res  = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
  9.         for i in range(6):
  10.             res[poss[i][0]][poss[i][1]] = round(arr[i], 4)
  11.             res[poss[i][1]][poss[i][0]] = round(1/arr[i], 4)
  12.         s.append(res)
  13.     return s
  14.    

  15. if __name__ == '__main__' :
  16.     t=Traversal_4_4()
  17.     for x in t:
  18.        print(x)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-17 10:24:09 From FishC Mobile | 显示全部楼层
阴阳神万物主 发表于 2020-2-16 23:18
加油,我说说我对这个数字的看法:
总共 16 个点,其中 4 个一定是  1 ,剩下 12 个有一半是随着对称点 ...

引用: xdhuch 发表于 2020-2-17 10:04
你修改我的代码的时候用到了list拷贝,这里有个陷阱就是你直接循环使用res进行拷贝,当res中的值变化时 ...

你们都是对的,一个评分,一个最佳答案
哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 03:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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