hdu1271

/*
分析:
    一开始就想到要把原数分成三份为a、b、c的,但是没有
继续想下去。。。就这样和answer擦肩而过了,囧~~~
    吸取教训吧~。
    这个方法的详细解释网上一堆呢,这儿就不啰嗦了。。。


                                                              2012-11-22
*/









#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int n;
int ans[111],k;
int cmp(const void *a,const void *b)
{
	return *(int *)a-*(int *)b;
}
int main()
{
	int i;
	int a,b,c;
	while(scanf("%d",&n),n)
	{
		k=0;
		for(i=1;i<=n;i*=10)
		{
			a=n/i/11;
			b=n/i-11*a;
			if(b<10)
			{
				c=(n-a*i*11-b*i)/2;
				if(2*c+b*i+a*i*11==n)	ans[k++]=a*10*i+b*i+c;
			}
			if(--b>=0 && (b||a))
			{
				c=(n-a*i*11-b*i)/2;
				if(2*c+b*i+a*i*11==n)	ans[k++]=a*10*i+b*i+c;
			}
		}
		if(!k)	{printf("No solution.\n");continue;}

		qsort(ans,k,sizeof(int),cmp);
		printf("%d",ans[0]);
		for(i=1;i<k;i++)	if(ans[i]!=ans[i-1])	printf(" %d",ans[i]);
		printf("\n");
	}
	return 0;
}


你可能感兴趣的:(hdu1271)