2 回答

TA貢獻1936條經驗 獲得超7個贊
你的任務前提不正確:
從任何數字開始。如果這個數能被 3 整除,就除以 3。否則,給這個數加 2。最終,無論你從什么數字開始,這個系列都會變成 1。
number = 4
4 + 2 = 6 # 4 is not divisible by 3, add 2
6 / 3 = 2 # 6 is divisible by 3 -> 2
2 + 2 = 4 # 2 is not divisible by 3, add 2
4 + 2 = 6 # 4 is not divisible by 3, add 2 --> cycle - no solution.
如果有解決方案,則會找到它:
def joyner(num):
count = 0
seen = set()
while num != 1:
if num in seen:
return None
else:
seen.add(num)
if num % 3 == 0:
num = num // 3
else:
num += 2
count += 1
return count
測試一下:
i = 0
for k,c in d.items():
if c is None:
continue
print(k,":",c, end=" ")
i += 1
if i % 6 == 0:
print()
i = 0
從 1 到 99 的解的輸出:
1 : 0 3 : 1 5 : 4 7 : 3 9 : 2 11 : 7
13 : 6 15 : 5 17 : 6 19 : 5 21 : 4 23 : 5
25 : 4 27 : 3 29 : 10 31 : 9 33 : 8 35 : 9
37 : 8 39 : 7 41 : 8 43 : 7 45 : 6 47 : 9
49 : 8 51 : 7 53 : 8 55 : 7 57 : 6 59 : 7
61 : 6 63 : 5 65 : 8 67 : 7 69 : 6 71 : 7
73 : 6 75 : 5 77 : 6 79 : 5 81 : 4 83 : 13
85 : 12 87 : 11 89 : 12 91 : 11 93 : 10 95 : 11
97 : 10 99 : 9
不可行:
[ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40,
42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
您的算法僅適用于奇數。
我們使用 num = 12 測試了您的代碼。我們希望 Joyner 返回 int 3。但是,它返回了 int 1。
不工作在所有

TA貢獻1836條經驗 獲得超3個贊
你的代碼的事情是它假設當一個數字不再能被 3 整除時它達到 1,那就是關于你的第二個循環,例如 15 可以被 3 整除,它變成 5,它不能被整除,但也不能被整除1.
總體上這樣想,一個數可能是可整除的,也可能是不可整除的,所以它應該在一個循環中發生,當你達到1時你應該停止。
添加回答
舉報