package com.pb.structureAndalgorithm.previousRealTopic.test2013B;
/*
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
297 54
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
*/
public class Main {
public static void main(String[] args) {
getCount();
//isMeetTheConditions("12", "345");
}
// 循环5个数
private static void getCount(){
int count = 0;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
for (int k = 1; k <= 9; k++) {
for (int l = 1; l <= 9; l++) {
for (int m = 1; m <= 9; m++) {
// 五个数各个各不相同
if (i != j && i != k && i != l && i != m && j != k
&& j != l && j != m && k != l && k != m && l != m){
// 拼接前两个
String factor1 = i + "" + j;
// 拼接后三个
String factor2 = k + "" + l + m;
// 获取满足条件的个数和
if (isMeetTheConditions(factor1, factor2)){
count ++;
}
}
}
}
}
}
}
System.out.println(count);
}
// 位置调换查看结果
private static boolean isMeetTheConditions(String factor1, String factor2){
// 临时变量接收
String temp1 = factor1;
String temp2 = factor2;
// 转为int类型
int f1 = Integer.valueOf(temp1);
int f2 = Integer.valueOf(temp2);
// 计算前面的结果
long res1 = f1 * f2;
// 保证temp1为二位数的 temp2为三位数的
if (f1 > f2){
temp1 = factor2;
temp2 = factor1;
}
// 条件位置调换
String s1 = temp1.charAt(0) + "" + temp2.charAt(1) + temp1.charAt(1);
String s2 = temp2.charAt(0) + "" + temp2.charAt(2);
// 计算结果
long res2 = Integer.valueOf(s1) * Integer.valueOf(s2);
// 判断是否前后结果一样
if (res1 == res2){
// 验证查看
/*System.out.print(f1 + "*" + f2 + "=" + res1 + ", ");
System.out.println(s1 + "*" + s2 + "=" + res2);*/
return true;
}else {
return false;
}
}
}
蓝桥杯2013年省赛B组第二题
最新推荐文章于 2025-04-12 17:30:00 发布