2 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
你的任務(wù)前提不正確:
從任何數(shù)字開(kāi)始。如果這個(gè)數(shù)能被 3 整除,就除以 3。否則,給這個(gè)數(shù)加 2。最終,無(wú)論你從什么數(shù)字開(kāi)始,這個(gè)系列都會(huì)變成 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.
如果有解決方案,則會(huì)找到它:
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
測(cè)試一下:
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]
您的算法僅適用于奇數(shù)。
我們使用 num = 12 測(cè)試了您的代碼。我們希望 Joyner 返回 int 3。但是,它返回了 int 1。
不工作在所有

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
你的代碼的事情是它假設(shè)當(dāng)一個(gè)數(shù)字不再能被 3 整除時(shí)它達(dá)到 1,那就是關(guān)于你的第二個(gè)循環(huán),例如 15 可以被 3 整除,它變成 5,它不能被整除,但也不能被整除1.
總體上這樣想,一個(gè)數(shù)可能是可整除的,也可能是不可整除的,所以它應(yīng)該在一個(gè)循環(huán)中發(fā)生,當(dāng)你達(dá)到1時(shí)你應(yīng)該停止。
添加回答
舉報(bào)