http://oj.ecustacm.cn/problem.php?id=1332
最简单的方法: 直接暴力
#include<cstdio>
int main(void)
{
int a[10];
int n;
int sum1,sum2;
for(a[0]=0;a[0]<=9;a[0]++)
{
for(a[1]=0;a[1]<=9;a[1]++)
{
for(a[2]=0;a[2]<=9;a[2]++)
{
for(a[3]=0;a[3]<=9;a[3]++)
{
for(a[4]=0;a[4]<=9;a[4]++)
{
for(a[5]=0;a[5]<=9;a[5]++)
{
for(a[6]=0;a[6]<=9;a[6]++)
{
for(a[7]=0;a[7]<=9;a[7]++)
{
for(a[8]=0;a[8]<=9;a[8]++)
{
for(a[9]=0;a[9]<=9;a[9]++)
{
bool b[10]={
false};
int n=0;
for(int i=0;i<10;i++)
{
b[a[i]]=true;
}
for(int i=0;i<10;i++)
{
if(b[i]==true)
n++;
}
if(n==10)
{
sum1=a[0]*1000+a[1]*100+a[2]*10+a[3];
sum2=a[4]*1000+a[5]*100+a[6]*10+a[7];
int sum3=sum1-sum2;
if(sum3*(a[8]*10+a[9])==900)
{
printf("(%d%d%d%d-%d%d%d%d)*(%d%d)=900\n",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
}
}
}
}
}
}
}
}
}
}
}
}
return 0;
}
上面的这种写法太冗杂了,那么来一个简单点的。
其实,本题是一个全排列问题。找出满足题目要求的排列就行了。
我们知道在库里有一个现成的求全排列的函数,直接调用就可以了。
这种方法的时间和代码量都比上面的优秀许多。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main(void)
{
int sum1;
int sum2;
int sum3;
int a[10]={
0,1,2,3,4,5,6,7,8,9};
do
{
sum1=a[0]*1000+a[1]*100+a[2]*10+a[3];
sum2=a[4]*1000+a[5]*100+a[6]*10+a[7];
sum1=sum1-sum2;
sum2=a[8]*10+a[9];
if(sum1*sum2==900)
{
for(int i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
}while(next_permutation(a,a+10));
return 0;
}