栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java习题练习:马虎的算式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java习题练习:马虎的算式

Java习题练习:马虎的算式

题目整体思路源代码

题目

小明是个急性子上小学的时候经常把老师写在黑板上的题目抄错了。

有一次老师出的题目是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) {
		// TODO Auto-generated method stub
		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)==%dn",a,b,c,d,e,a,d,b,c,e,(a*10+b)*(c*100+d*10+e));
								}
							}
						}
					}
				}
			}
		}
		System.out.println(ans);
	}	
}

有时候一个字母的写错,都会导致答案的错误。
例如if限制条件写错一个字母了,那么就会导致题解的错误。我们要尽量避免这样的的事情发生。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768189.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号