小明的作业本上有道思考题:看下面的算式:
(□□□□-□□□□)*□□=900
其中的小方块代表0~9的数字,这10个方块刚好包含了0~9中的所有数字。
注意:0不能作为某个数字的首位。
小明经过几天的努力,终于做出了答案!如下:
(5012-4987)*36=900
用计算机搜索后,发现还有另外一个解,本题的任务就是:请你算出这另外的一个解。
注意:提交的格式需要与示例严格一致;
括号及运算符号不要用中文输入法;
整个算式中不能包含空格。
这题刚一拿起题来感觉很简单,不就用几个for循环就解决了。但是你高兴的太早了,当你用for循环时你就会焕然大悟,想得太简单了。for循环超时,根本输不出答案。
最后认真想了下,最后用深搜解决了超时没有答案的问题
下面上代码
#include<stdio.h>
int ans[10];
int mid[10]={0,1,2,3,4,5,6,7,8,9};
int book[10]={0};
void dfs(int step)
{
int i;
int a,b,c;
if(step==10)
{
if(ans[0]!=0&&ans[4]!=0&&ans[8]!=0)
{
a=ans[0]*1000+ans[1]*100+ans[2]*10+ans[3];
b=ans[4]*1000+ans[5]*100+ans[6]*10+ans[7];
c=ans[8]*10+ans[9];
if((a-b)*c==900)
{
printf("(%d-%d)*%d=900\n",a,b,c);
}
}
}
for(i=0;i<10;i++)
{
if(book[i]==0)
{
ans[step]=mid[i];
book[i]=1;
dfs(step+1);
book[i]=0;
}
}
}
int main()
{
dfs(0);
return 0;
}