键盘输入两个1到100之间的整数,作为这个数列的第一、二项,这个数列从第三项开始,满足:先将这一项的前两项相加, 如果和是偶数,则将和除以2,并放入这一项中;如果和是奇数,则将和乘以2并加上1,放入这一项中。编程输出该数列的前20项
参考代码
def get_number():
"""获取用户输入的两个整数"""
a = int(input())
b = int(input())
return a, b
def generate_number_sequence(a, b, n):
"""生成数列前n项并返回"""
seq = [a, b]
for i in range(2, n):
c = seq[i-2] + seq[i-1] # 计算新一项的值
if c % 2 == 0:
seq.append(c // 2)
else:
seq.append(c * 2 + 1)
return seq
# 获取用户输入的两个整数
a, b = get_number()
# 生成数列前20项并输出
seq = generate_number_sequence(a, b, 20)
for i, x in enumerate(seq):
print(f'a[{i}] = {x}')
a, b = map(int, input("输入前两项,用空格隔开:").split())
print(a, b, end=" ")
for i in range(18):
if (a + b) % 2 == 0:
c = (a + b) // 2
else:
c = (a + b) * 2 + 1
print(c, end=" ")
a, b = b, c
代码运行效果截屏图片
代码
#!/sur/bin/nve python
# coding: utf-8
a, b = map(int, input(f"\n{' 裴波拉契数列“变种” ':~^42}\n\n{'请输入前两项(如 5 9):'}").strip().split())
print(f"{'第':>12}{1:0>2}项:{a:>10}")
print(f"{'第':>12}{2:0>2}项:{b:>10}")
for i in range(20-2): # 循环打印3~20项。
c = (a + b)//2 if not (a+b)%2 else (a+b)*2+1 # 按“题目规则”计算第三项。
print(f"{'第':>12}{i+3:0>2}项:{c:>10}")
b, a = c, b # 更新前两项。
如果节点的下标为p,那么其左子节点下标为2p,右子节点为2p+1,其父节点下标为p//2