给定一个自然数 n,由n开始可以依次产生半数集set(n)中的数如下:n<200(1)nÎset(n); (2)在n 的左边加上一个自然数,但该自然数不能超过最近添加数的一半; (3)按此规则进行处理,直至不能添加自然数为止。 例如,set(6)={6,16,26,126,36,136}。 注意:该半数集是多重集。 要求:对于给定的自然数n,计算半数集set(n)中的元素个数。/
(1)//半数集:两种思想如下
//(1)f(n)=1+f(1)+f(2)+f(3)+.....+f(n/2)
//(2)f(n)=f((n/2)*2-1)+f(n/2)
#include<stdio.h>
int f(int n){
int count=1;
int i;
if(n==1)
return 1;
for(i=1;i<=n/2;i++){
count=count+f(i);
}
return count;
}
int main(){
printf("请输入自然数n\n");
int n;
scanf("%d",&n);
printf("输入的数的半数集为:");
printf("%d\n",f(n));
return 0;
}
#include<stdio.h>
int f(int n){
int count=1;
int i;
if(n==1)
return 1;
for(i=1;i<=n/2;i++){
count=count+f(i);
}
return count;
}
int main(){
printf("请输入自然数n\n");
int n;
scanf("%d",&n);
printf("输入的数的半数集为:");
printf("%d\n",f(n));
return 0;
}