#include <stdio.h>
#include <string.h>
int a[1000];
int fun1(int n) //半数单集
{
if(a[n])
return a[n];
a[n]=1;
for(int i = 1;i<=n/2;i++)
{
a[n]+=fun1(i);
if(i>=10 && 2*(i/10)<=i%10) //半数集和半数单集区别的最主要的地方
{
a[n]-=a[i/10];
}
}
return a[n];
}
int fun2(int n) //半数集
{
if(!n)
return 1;
int count = 0;
for(int i = 0;i<=n/2;i++)
count+=fun2(i);
return count;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
fun1(n);
printf("半数单集%d 半数集%d\n",a[n],fun2(n));
}
return 0;
}
半数集VS半数单集
最新推荐文章于 2017-04-04 15:31:11 发布