【题目描述】
我们要求找出具有下列性质数的个数(包含输入的正整数 n)。
先输入一个正整数 n(n≤1000),然后对此正整数按照如下方法进行处理:
1.不作任何处理;
2.在它的左边加上一个正整数,但该正整数不能超过原数的一半;
3.加上数后,继续按此规则进行处理,直到不能再加正整数为止。
输入n, 输出一个整数(该整数我在代码中用re[n]来表示)表示具有该性质的数的个数;
【案例】
输入 6
输出 6
其中案例中的 6 个数是: 6,16,26,36,126,136
【代码】
import os
import sys
# 请在此输入您的代码:
n = int(input())
re = [-1] * (n + 1)
# 创建一个列表re,长度为n+1,初始值全部设置为-1,避免重复计算。
re[1] = 1
for x in range(2, n + 1):
if re[x] == -1:
temp = 1
for i in range(1, x // 2 + 1):
temp += re[i]
re[x] = temp
print(re[n])
在列表第一位插入一个小于n//2的数,同时设一个变量加一计数 ,重新访问列表的第一位,直到没有数小于n//2.
import os
import sys
# 请在此输入您的代码:
n = int(input())
ans = 0
stack = [(n, False)]#建了一个列表 stack,其中包含一个元组 (n, False)
while stack:
m, visited = stack.pop()#将栈顶的元组中的第一个值赋给 m,将第二个值赋给 visited。
if not visited:#false
ans += 1
stack.append((m, True))#把一个包含 m 和 True 的元组添加到了栈 stack 的末尾
for i in range(1, m // 2 + 1):
stack.append((i, False))
print(ans)
【结果截图】