题目描述
我们要求找出具有下列性质数的个数(包括输入的自然数n)。先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:
-
不作任何处理;
-
在它的左边加上一个自然数,但该自然数不能超过原数的一半;
加上数后,继续按此规则进行处理,直到不能再加自然数为止。
输入格式
自然数n(n≤1000)。
输出格式
满足条件的数。
样例
输入样例复制
6 满足条件的数为 6(此部分不必输出)
16
26
126
36
136
输出样例复制
6
这道题不难,可以用递推
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[1005]={0,1,2};
int f(int n){
if(a[n]!=0) return a[n];
if(n%2!=0) a[n]=f(n-1);
else a[n]=f(n-1)+f(n/2);
return a[n];
}
int main(){
int n;
cin>>n;
cout<<f(n);
return 0;
}
该博客介绍了一道编程题目,要求找出一个自然数n按照特定规则(在其左侧不断添加不超过原数一半的自然数)所能形成的数列的个数。博主给出了递归解决方案,并提供了代码实现。递归函数`f(n)`用于计算这个值,通过已知的前两个数的个数`a[0], a[1]`初始化数组`a[]`,然后根据n的奇偶性递归计算结果。最终输出满足条件的数的个数。
1352

被折叠的 条评论
为什么被折叠?



