伊小七momo网盘:算法:一个一位数加两位数加三位数等于一个四位数

来源:百度文库 编辑:高考问答 时间:2024/04/29 17:54:18
这10个数互不相等
可不可以用VB的语言给我写出来!谢谢!还有十个数字是0到9,不能重复!式子是这样的:a+bc+def=xyz
abcdefxyz这9个数互不相等,

用穷举法:

#include "stdafx.h"
#include "iostream.h"

int main()
{
int x[10];
int i;
for (x[0]=0;x[0]<10;x[0]++)
{
for (x[1]=0;x[1]<10;x[1]++)
{
if(x[0]==x[1])
continue;
for (x[2]=0;x[2]<10;x[2]++)
{
if((x[2]==x[1]) || (x[2]==x[0]))
continue;
for (x[3]=0;x[3]<10;x[3]++)
{
if((x[3]==x[0])||(x[3]==x[1])||(x[3]==x[2]))
continue;
for (x[4]=0;x[4]<10;x[4]++)
{
for(i=0;i<4;i++)
if(x[4]==x[i])
break;
if((i!=4)&&(x[4]==x[i]))
continue;
for (x[5]=0;x[5]<10;x[5]++)
{
for(i=0;i<5;i++)
if(x[5]==x[i])
break;
if((i!=5)&&(x[5]==x[i]))
continue;
for (x[6]=1;x[6]<10;x[6]++)
{
for(i=0;i<6;i++)
if(x[6]==x[i])
break;
if((i!=6)&&(x[6]==x[i]))
continue;
for (x[7]=0;x[7]<10;x[7]++)
{
for(i=0;i<7;i++)
if(x[7]==x[i])
break;
if((i!=7)&&(x[7]==x[i]))
continue;
for (x[8]=0;x[8]<10;x[8]++)
{
for(i=0;i<8;i++)
if(x[8]==x[i])
break;
if((i!=8)&&(x[8]==x[i]))
continue;
for (x[9]=0;x[9]<10;x[9]++)
{
for(i=0;i<9;i++)
if(x[9]==x[i])
break;
if((i!=9)&&(x[9]==x[i]))
continue;
if(x[0]+10*x[1]+x[2]+100*x[3]+10*x[4]+x[5]==1000*x[6]+100*x[7]+10*x[8]+x[9])
cout<<x[0]<<"+"<<10*x[1]+x[2]<<"+"<<100*x[3]+10*x[4]+x[5]<<"="<<1000*x[6]+100*x[7]+10*x[8]+x[9]<<endl;

}
}
}
}
}
}
}
}
}
}
return 0;

}

你说的这种情况最大可能组成的四位数是4+75+986=1065
在这三个分别是一位或者两位或者三位数,可以将个位\十位及百位互换.就又分别组成了新的数字.
我们知道最小的四位数是1000.如果我们将上面的表达示中的三位数的个位减一,就会得到新比1056小一的四位数,将个十百位互换又可以组成新的三个数字.在