Collatz猜想
我想做什么: 编写一个名为collatz_sequence的函数,它接受一个起始整数并返回该数字的整数序列,包括起始点。以列表的形式返回序列。创建你的函数,这样如果用户输入任何小于1的整数,它将返回空列表[]。
关于collatz猜想的背景:
取任何自然数n。如果n是偶数,则将其除以2得到n / 2,如果n为奇数则将其乘以3并加1得到3n + 1.重复该过程无限期。猜想是,无论你从哪个数字开始,你总是会达到1。
到目前为止我所拥有的:
def collatz_sequence(x):
seq = [x]
if x < 1:
return []
while x > 1:
if x % 2 == 0:
x= x/2
else:
x= 3*x+1
return seq
当我使用小于1的数字运行时,我得到正确的空集。但是当我使用高于1的数字运行时,我只得到那个数字,即collatz_sequence(6)返回[6]。我需要这个来返回整个数字序列,所以6应该在列表中返回6,3,10,5,16,8,4,2,1。
答案 0 :(得分:9)
您忘了将x
值附加到seq
列表:
def collatz_sequence(x):
seq = [x]
if x < 1:
return []
while x > 1:
if x % 2 == 0:
x = x / 2
else:
x = 3 * x + 1
seq.append(x) # Added line
return seq
验证
~/tmp$ python collatz.py
[6, 3, 10, 5, 16, 8, 4, 2, 1]
答案 1 :(得分:3)
def collatz_sequence(x):
seq = [x]
while seq[-1] > 1:
if x % 2 == 0:
seq.append(x/2)
else:
seq.append(3*x+1)
x = seq[-1]
return seq
这里有一些产生你正在寻找的东西的代码。 1
的检查内置于while语句中,并迭代地附加到列表seq
。
>>> collatz_sequence(6)
[6, 3, 10, 5, 16, 8, 4, 2, 1]
注意,对于大型数字列表,这将非常慢。缓存不能解决速度问题,你将无法在项目欧拉问题的暴力解决方案中使用它,它将永远需要(因为每次计算,每次迭代都会这样做。)
答案 2 :(得分:0)
这是另一种方法:
while True:
x=int(input('ENTER NO.:'))
print ('----------------')
while x>0:
if x%2==0:
x = x/2
elif x>1:
x = 3*x + 1
else:
break
print (x)
这将要求用户一次又一次地输入一个号码,直到他退出
答案 3 :(得分:0)
def collatz(x):
while x !=1:
print(int(x))
if x%2 == 0:
x = x/2
else:
x = 3*x+1
这就是我的建议......
答案 4 :(得分:0)
seq = []
x = (int(input("Add number:")))
if (x != 1):
print ("Number can't be 1")
while x > 1:
if x % 2 == 0:
x=x/2
else:
x = 3 * x + 1
seq.append (x)
print seq
答案 5 :(得分:0)
这给出一个数字的所有步骤。它在0.3秒内处理了50位数字。
collatz = []
def collatz_sequence(x):
while x != 1:
if x % 2 == 0:
x /= 2
else:
x = (3*x + 1)/2
collatz.append(int(x))
print(collatz)
collatz_sequence()
答案 6 :(得分:0)
递归:
def collatz(n):
if n == 1: return [n]
elif n % 2 == 0: return [n] + collatz(int(n/2))
else: return [n] + collatz(n*3+1)
print(collatz(27))
答案 7 :(得分:0)
steps=0
c0 = int(input("enter the value of c0="))
while c0>1:
if c0 % 2 ==0 :
c0 = c0/2
print(int(c0))
steps +=1
else:
c0 = (3 * c0) + 1
print(int(c0))
steps +=1
print("steps= ", steps)
答案 8 :(得分:-1)
START "" /d "\\server\path\folder" "\\server\path\folder\file.exe" "http://google.com"
答案 9 :(得分:-1)
def collataz(number):
while number > 1:
if number % 2 == 0 :
number = number //2
print(number)
elif number % 2 ==1 :
number = 3 * number + 1
print(number)
if number == 1 :
break
print('enter any number...!')
number=int(input())
collataz(number)