(百例编程)68.九位累进可除数

题目:求九位累进可除数。所谓九位累进可除数就是这样一个数:这个数用到1到9这九个数字组成,
每个数字刚好只出现一次。这九个位数的前两位能被2整除,前三位能被3整除......前N位能被N整除,
整个九位数能被9整除。
//题目:求九位累进可除数。所谓九位累进可除数就是这样一个数:这个数用到1到9这九个数字组成,
//每个数字刚好只出现一次。这九个位数的前两位能被2整除,前三位能被3整除......前N位能被N整除,
//整个九位数能被9整除。
//BY as1138 2011-10-16

#include <iostream>
using namespace std;

void pailie(int *ite,int str,int num);
void SwapInt(int &a,int &b);
bool IsOk(int *ite);

int main(void)
{
	int iTem[9] = {1,2,3,4,5,6,7,8,9};
    pailie(iTem,0,9);
	return 0;
}

void SwapInt(int &a,int &b)
{
    int tem;
	tem = a;
	a = b;
	b = tem;
}

void pailie(int *ite,int str,int num)
{
	if (str == num-1)
	{
      if(IsOk(ite))
	   {
		   int j = 0;
		   while (j!=9)
		      cout<<ite[j++];
		   cout<<endl;
	   }
	}

	for (int i=str;i!=num;++i)
	{
		SwapInt(ite[i],ite[str]);
		pailie(ite,str+1,num);
		SwapInt(ite[i],ite[str]);
	}
}

bool IsOk(int *ite)
{
   long tt = 0;
   long lTen = 1;
   for (int i=1;i!=9;++i)
   {
	   for (int j=i;j!=-1;--j)
	   {
           tt += ite[j]*lTen;
		   lTen *= 10;
	   }//end for j
	   if(tt %(i+1) != 0)
		   return false;
	   tt = 0;
	   lTen = 1;
   }//end for i
   
   return true;
}



版权声明:本文为csy981848153原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。