正文

半数集问题2007-06-06 20:24:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/26452.html

分享到:

问题描述

问题描述:
给定一个自然数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)中的元素个数。

输入

输入数据m行,每行给出一个整数n。(0〈n〈1000)

输出

输出只有m行,每行给出半数集set(n)中的元素个数。

输入样例


6
99

输出样例


6
9042

// mycode ,这里是“多重集”,非多重集有点麻烦

#include <stdio.h>

int a[1000],aj;

void get(int n){
 int i,j,k;
 for(i=aj+1; i <= n; i++){
  k = i/2;
  for(a[i]=j=1; j <= k; j++)
   a[i] = a[i] + a[j];
 }
 aj = n;
}
int main(){
 int n;
 aj = a[0] = a[1] = 1;
 while(scanf("%d",&n)!=EOF){
  if(n > aj)
   get(n);
  printf("%d\n",a[n]);
 }
 return 0;
}

阅读(4247) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册