作者apua (Apua)
看板Python
标题Re: [问题] 排除输出重复数值的方法
时间Sat Nov 3 14:29:23 2012
其实要用世界奇观来解决重复值的部份是可行的,而且几乎不用变动您的结构
主要是进入下一层回圈时就要求 大於等於 上一层回圈的值
既然後面的值都不会比前面的值小 (递增数列) 自然不会再有左右对称而重复的问题。
以下是小修後的原po程式码,重点只有 ``range(a,x)`` ,即上述;
而加入 break 的判断,只是避免不必要的走到回圈深处,因为走进去也求不到值。
x = 4
N = 9
for a in range(1,x):
if a*8 > N: break
N -= a
for b in range(
a,x):
if b*7 > N: break
N -= b
for c in range(
b,x):
if c*6 > N: break
N -= c
for d in range(
c,x):
if d*5 > N: break
N -= d
for e in range(
d,x):
if e*4 > N: break
N -= e
for f in range(
e,x):
if f*3 > N: break
N -= f
for g in range(
f,x):
if g*2 > N: break
N -= g
for h in range(
g,x):
if h*1 > N: break
if h == N: print (a,b,c,d,e,f,g,h)
N += g
N += f
N += e
N += d
N += c
N += b
N += a
pass
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.27.47
1F:推 darkgerm:多层回圈建意用 DFS 做...暴力写多层会让程式不易读 11/03 15:01
2F:→ darkgerm:要维护或扩充也不方便 例如如果有 N 个变数就做不出来了 11/03 15:02
※ 编辑: apua 来自: 123.204.159.73 (11/03 15:45)
3F:推 sofaly:小弟真的没学过 所以才东拼西凑 XD 11/03 16:53
4F:→ apua:回楼上,认真不开玩笑,推荐darkgerm的作法 11/03 17:36
5F:→ apua:只要跟「生成一堆有规律的资料」有关的工具,找 itertools 11/03 17:37
6F:推 sofaly:是的 了解 ^^" 11/03 17:37
7F:→ apua:import itertools; help(itertools) 看一下,帮助很大 11/03 17:37
8F:推 sofaly:谢谢^^ 11/03 18:09
9F:推 cobrasgo:原po你太闲了吧,帮忙装潢世界奇观干嘛啊XDDD 11/04 11:31
10F:推 Conjuror:世界奇观 XDD 11/05 11:22
11F:推 keitheis:路过来世界奇观观光 11/05 18:07