前言
c练习题
正文
找出一个数的子孙数,n的子孙数如下
在它左边加上一个自然数,但该自然数不能超过原数的一半,则形成的数称为“子孙数”,得到子孙数后,继续按此规则进行处理,直到不能再加自然数为止。
例如:6的子孙数有6个,分别是6,16,26,36,126,136.
代码
总结:感觉这个题目和数据结构中关于树中的递归类似。
把每一个顶点看做一颗树的根,向下遍历,直到其最左边的那位数为1时返回,返回过程累加求和算出S
#include <stdio.h>
int f[1010];
int main(){
int n;
scanf("%d",&n);
int s=fun(n);
printf("%d",s);
}
int fun(int x){
int i,s=1;
if(x==1)
return 1;
else{
for(i=1;i<=x/2;i++)
s+=fun(i);
return s;
}
}