小明的作业本上有道思考题:看下面的算式:(□□□□-□□□□)*□□=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=900n",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;
}
本文发布于:2024-02-05 07:53:55,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170727786464709.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |