洛谷 P1028 数的计算
题目
题目描述
我们要求找出具有下列性质数的个数(包含输入的自然数nn):
先输入一个自然数nn(n \le 1000n≤1000),然后对此自然数按照如下方法进行处理:
不作任何处理;
在它的左边加上一个自然数,但该自然数不能超过原数的一半;
加上数后,继续按此规则进行处理,直到不能再加自然数为止.
输入格式
11个自然数nn(n \le 1000n≤1000)
输出格式
11个整数,表示具有该性质数的个数。
输入输出样例
输入 #1 复制
6
输出 #1 复制
6
说明/提示
满足条件的数为
6,16,26,126,36,136
题目来源于洛谷,https://www.luogu.com.cn/problem/P1028
解答
这里应该想到的是递推,因为n是在1000以内的数,大几百的数求解的时候是比较难算的,那肯定是有规律在其中,所以我们可以从小的数出发去找规律,
数 | answer |
---|---|
1 | 1 |
2 | 2 |
3 | 2 |
4 | 4 |
5 | 4 |
6 | 6 |
7 | 6 |
其实这里就可以看出端倪,我们先给前几个答案赋值一下,然后后面找到规律进行递推,并存起来每个数的结果。
代码
n = input()
n = int(n)
answer = [0,1,2]
for i in range(3,n+1):
if(i%2!=0):
a = answer[i-1]
answer.append(a)
else:
a = answer[i-1]+answer[int(i/2)]
answer.append(a)
print(answer[n])