题目
小明是个急性子上小学的时候经常把老师写在黑板上的题目抄错了。
有一次老师出的题目是36 x 495 = ?
他却给抄成了396 x 45 = ?
但结果却很戏剧性他的答案竟然是对的
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多比如27 * 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字注意是各不相同的数字且不含0
整体思路
2013年第四届蓝桥杯 Java B组省赛第一题和A组是同一道题,所以直接去看A组的答案就行。这道题是2013年第四届蓝桥杯 Java B组省赛第二题马虎的算式。
这是一道填空题。不用提交代码,只需要在网站上提交答案即可。不过我们还是用代码得出那个答案。听说有些人用excel来得到答案,可惜我不会。
读完题目,我们立即就发现可以暴力破解。用5个个位数来分别表示a,b,c,d,e,用5个for循环一一枚举。注意一些限制条件。就是不能a,b,c,d,e不能相等。
那么另一个思路,我们能不能用一个数表示,之后拆分成a,b,c,d,e呢,其实也可以的。不过这里就不给出代码了。
源代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int ans=0;
for(int a=1;a<10;a++) {
for(int b=1;b<10;b++) {
if(a!=b) for(int c=1;c<10;c++) {
if(c!=a&&c!=b) for(int d=1;d<10;d++) {
if(d!=a&&d!=b&&d!=c) for(int e=1;e<10;e++) {
if(e!=a&&e!=b&&e!=c&&e!=d) {
if(((a*10+b)*(c*100+d*10+e))==((a*100+d*10+b)*(c*10+e))){
ans++;
System.out.printf("(%d*10+%d)*(%d*100+%d*10+%d)==(%d*100+%d8*10+%d)*(%d*10+%d)==%d\n",a,b,c,d,e,a,d,b,c,e,(a*10+b)*(c*100+d*10+e));
}
}
}
}
}
}
}
System.out.println(ans);
}
}
有时候一个字母的写错,都会导致答案的错误。 例如if限制条件写错一个字母了,那么就会导致题解的错误。我们要尽量避免这样的的事情发生。
|