1. 程式人生 > >數的變幻(和數能表示1~23的5個正整數)

數的變幻(和數能表示1~23的5個正整數)

/**************************************** 
*  File Name  : figure.c 
*  Creat Data : 2015.1.29
*  Author     : ZY 
*****************************************/ 

/*數的變幻*/
/*和數能表示1~23的5個正整數*/
/*已知五個互不相同的的正整數之和為23,且從這五個數中挑選若干個加起來可以表示
表示從1到23之內的全部自然數,問這五個數都是什麼?*/


#include <stdio.h>
int main(void)
{
	int a,b,c,d,e,i,j,k,l,m,x,count = 0,f = 0;//f:分解的5個數可以表示為1~23的標記
    printf("There are following possible result:\n");
	for(a = 1;a < 24;a++)//將23分解成a,b,c,d,e五個數
	{
		for(b = 1+a;b < 24-a;b++)
		{
			for(c = 1+b;c < 24-a-b;c++)
			{
				for(d = 1+c;d < 24-a-b-c;d++)
				{
					f = 1;
					if((e=23-a-b-c-d)>d)
					{
						for(f = 0,x = 1;x<24&&!f;x++)//判斷5個數可否表示1~23
						{
							for(f = 1,i = 0;i<2&&f;i++)//窮舉五個數的全部取捨
							{
								for(j = 0;j<2&&f;j++)
								{
									for(k = 0;k<2&&f;k++)
									{
										for(l = 0;l<2&&f;l++)
										{
											for(m = 0;m<2&&f;m++)
											{
												if(x == a*i+b*j+c*k+d*l+e*m)
												{
													f = 0;
												}
											}
										}
									}
								}
							}
						}
						if(!f)
						{
							printf("[%2d] :%2d %2d %2d %2d %2d\n",++count,a,b,c,d,e);
						}
					}
				}
			}
		}
	}
	return 0;
}