问题描述 问题描述: 给定一个自然数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)中的元素个数。 输入样例 699 输出样例 69042 // 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;}

评论