给定一个自然数n,由n 开始可以依次产生半数集set(n)中的数如下(注意半数集是多重集)。

  1. n∈set(n);
  2. 在n 的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
  3. 按此规则进行处理,直到不能再添加自然数为止。

例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6 个元素。

输入格式

一个自然数n(0<n<1000)

输出格式

半数集set(n)中的元素个数

输入样例

1
6

输出样例

1
6

解题思路

采用递归的方法,统计每次递归是符合条件的个数即可

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
//int s[500];
int set(n)
{
int i,sum = 1;
for(i=1;i<=n/2;i++)
sum += set(i);
return sum;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",set(n));
return 0;
}