读书人

请问这样一个有关问题集合

发布时间: 2012-05-27 05:42:30 作者: rapoo

请教这样一个问题,集合
kset(n) 里面有这么一些数:
1)n ∈ kset(n);
2)在n的左边添加一个正整数,但数值不能大于左边最近添加的数的1/2。
3)在n的右边添加一个正整数,但数值不能大于右边最近添加的数的1/2。
4)按此规则进行处理,直到不能添加。
例如kset(2) = {2, 12, 21, 121}。则该集合的元素个数是4.
数据输入
输入第一行包括一个 t ( 1 <= t <= 10),表示有 t 组数据,每组数据一行,一个整数 n
( 0 < n < 10) .
数据输出
对于每组数据输出一行,即kset(n) 中的元素个数.
(因为这是一个集合,所以里面是不允许有重复元素的)

[解决办法]
#include <stdio.h>
int ans[10];
int set(int n)
{
int a=1,i;
if(ans[n]>0)return ans[n];
for(i=1;i<=n/2;i++)
{

a=2*(a+set(i));
if(i>=3)
a=a-set(i);
}
ans[n]=a;
return ans[n];
}
void main()
{
int n,i,a[10];
scanf("%d",&n);
if(n>10||n<0)
printf("error!\n");
else
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
printf("%d\n",set(a[i]));

}
}

读书人网 >C语言

热点推荐