问题描述:给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下:
(1)set(n)中包含n;
(2)在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
(3)按此规则进行处理,直至不能添加自然数为止。
例如,set(6)={6,16,26,126,36,136}。
编程任务:对于给定的自然数n,编程计算半数集set(n)中元素的个数。
注意:该半数单集是去掉重复项的集合
参考代码:
#include<stdio.h>
int inta[600];
int f(int n)
{
long ans = 1;
for(int i= 1;i<=n/2;i++)
{
ans += f(i);
if( ( i>10) && (2*(i/10) <= i%10) )
ans -= inta[i/10];
}
inta[n] = ans;
return ans ;
}
int main(int argc, char* argv[])
{
int n ;
inta[1] = 1 ;
scanf("%d",&n);
printf("%d\n",f(n) );
return 0;
}