题目描述
给定一个自然数n,由n 开始可以依次产生半数集set(n)中的数如下。 (1) n∈set(n); (2) 在n 的左边加上一个自然数,但该自然数不能超过最近添加的数的一半; (3) 按此规则进行处理,直到不能再添加自然数为止。 例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6个元素。 注意半数集是多重集。 对于给定的自然数n,计算半数集set(n)中的元素个数。
输入
多组测试数据,每组一个整数n。(1≤n≤1000)
输出
输出n的半数集set(n)中的元素个数。
样例输入
6
1
样例输出
6
1
参考代码
#include <stdio.h>
#define LL long long
LL ans,a[1005],vis[1005];
LL dfs ( int n )
{
if ( vis[n] ) //å 为æ¯åä¸æ,æ以æè¿äºçå°±æ¯çæ¡äº
return vis[n];
if ( n == 1 ) //n=1æ¶è¿å1
return 1;
vis[n] = 1;
//æ¬èº«å°±æ¯ä¸ç§å¯è½
for ( int i = 1; i <= n/2; i ++ )
vis[n] = vis[n]+dfs ( i );
//ç´¯å ææå¯è½
return vis[n];
//è¿ååå¼
}
int main ( )
{
int n,j,i;
while ( scanf ( "%d", &n ) != EOF )
{
printf ( "%lldn", dfs ( n ) );
//printf ( "%lldn", a[n] );
}
return 0;
}
解析
暂无