最新消息:网站改版咯

九位累进可除数

C语言 Yovae 1833浏览

今天看到了九位累进可除数觉得有意思就做了一下.以下是过程.
累进可除数(英:Polydivisible number)是有以下特质的整数:首个位非零,而且由它首n个位组成的数是n的倍数。
例如345654:
1|3
2|34
3|345
4|3456
而123456就非累进可除数,因为1234不是4的倍数。
累进可除数是趣味数学上的一道名题的一般化:
用1至9排列成一个数,使其首2个位能被2除尽,首3个位能被3除尽,如此类推,整个数是9的倍数。

虽然9位的累进可除数有2492个,但唯一一个包含1至9的数字而不重复的只有一个,是381 654 729。

/*
 *coding:Yovae  2011-5-11
 *www.yovae.com
 */

#include <stdio.h>
#include <math.h>
#include <time.h>
int main()
{
	int i,j,t,c[10],d[10]={0},flag,start;
	start=clock();
	for(c[1]=1;c[1]<=9;c[1]++)
	{
	for(c[2]=1;c[2]<=9;c[2]++)
	{
	if(c[2]==c[1]) continue;
    for(c[3]=1;c[3]<=9;c[3]++)
	{
	if(c[3]==c[2]||c[3]==c[1]) continue;
	for(c[4]=1;c[4]<=9;c[4]++)
	{
	if(c[4]==c[3]||c[4]==c[2]||c[4]==c[1]) continue;
	for(c[5]=1;c[5]<=9;c[5]++)
	{
	if(c[5]==c[4]||c[5]==c[3]||c[5]==c[2]||c[5]==c[1]) continue;
	for(c[6]=1;c[6]<=9;c[6]++)
	{
	if(c[6]==c[5]||c[6]==c[4]||c[6]==c[3]||c[6]==c[2]||c[6]==c[1]) continue;
	for(c[7]=1;c[7]<=9;c[7]++)
	{
	if(c[7]==c[6]||c[7]==c[5]||c[7]==c[4]||c[7]==c[3]||c[7]==c[2]||c[7]==c[1]) continue;
	for(c[8]=1;c[8]<=9;c[8]++)
	{
	if(c[8]==c[7]||c[8]==c[6]||c[8]==c[5]||c[8]==c[4]||c[8]==c[3]||c[8]==c[2]||c[8]==c[1]) continue;
	for(c[9]=1;c[9]<=9;c[9]++)
	{
	if(c[9]==c[8]||c[9]==c[7]||c[9]==c[6]||c[9]==c[5]||c[9]==c[4]||c[9]==c[3]||c[9]==c[2]||c[9]==c[1])
	{
		continue;
	}
	else
	{
		
		for(i=1,t=0,flag=1;i<=9;i++)
		{ 
			t=0;
			for(j=i;j>=1;j--)
			{
			t+=(int)c[j]*pow(10,i-j);
			}
			if(t%i!=0)
			{
				flag=0;
				goto next;
			}
		}
    next:
		if(flag==1)
		{
			for(i=1;i<=9;i++)
			{
				printf("%d",c[i]);
			}
			printf("\n");
		}
	}

	}
	}
	}
	}
	}
	}
	}
	}
	}



    printf("---Total time:%fs\n",double(clock()-start)/1000);   
	return 0;
}

转载请注明:Yovae Studio » 九位累进可除数