用123456789组成三个三位数,每个数字只能用一次,使得第二个数是第一个数的两倍,第三个数是第一个数的三倍

/*用123456789组成三个三位数,每个数字只能用一次,使得第二个数是第一个数的两倍,第三个数是第一个数的三倍*/
#include
int x1,x2,x3,y1,y2,y3,z1,z2,z3;
void quwei(int &x1,int &x2,int &x3,int x){
x3=x%10;
x2=((x-x3)/10)%10;
x1=((x-x3-10*x2)/100)%10;
//printf("%d %d %d \n",x1,x2,x3);
}
/*对循环的数字进行判断*/ 
int *shuzu(int x1,int x2,int x3,int b[9]){
for(int i=0;i<9;i++){
if(x1==b[i])b[i]=0;
}
//printf("===%d===\n",x1);

for(int i=0;i<9;i++){
if(x2==b[i])b[i]=0;
}
//printf("===%d===\n",x2);
for(int i=0;i<9;i++){
if(x3==b[i])b[i]=0;
}
return b;
}


int pan(int x,int y,int z){
int b[9]={1,2,3,4,5,6,7,8,9};
int t=0;
quwei(x1,x2,x3,x);quwei(y1,y2,y3,y);quwei(z1,z2,z3,z);
shuzu(x1,x2,x3,b);shuzu(y1,y2,y3,b);shuzu(z1,z2,z3,b);
for(int i=0;i<9;i++){
if(b[i]==0)t++;//对0计数 
}
if(t==9)//若b[]中的0为九个则说明123456789都被用到,则满足题意返回1 
return 1;
else return 0;
}
int main(){
int x,y,z;
for(x=123;x<398;x++){
     y=2*x;z=3*x;
    if(z<987&&(x%10!=0)&&(y%10!=0)&&(z%10!=0))
if(pan(x,y,z))
printf("x=%d\ty=%d\tz=%d\n",x,y,z);}
return 0;

  1. /*全局变量要慎用,在本例中由于在开始时将t作为全局变量,在对b[]中的0进行计数时造成了数量的叠加。*/ 

你可能感兴趣的:(算法)