蓝桥杯Java:神奇算式

【题目】
    由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
    比如: 
210 x 6 = 1260 
8 x 473 = 3784
27 x 81 = 2187 
    都符合要求。
    如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
    请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
解题思路:暴力搜索

package 字符串处理;

import java.util.Arrays;

public class 神奇算式 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char ex[] = new char[4];
		char ex1[];
		// 记录一位乘三位符合的情况
		int num1 = 0;
		// 记录两位乘两位符合的情况
		int num2 = 0;
		for (int i = 2; i <= 9; i++) {
			for (int j = 1; j <= 9; j++) {
				for (int k = 0; k <= 9; k++) {
					for (int l = 0; l <= 9; l++) {
						// 一位乘三位
						int temp1 = j * 100 + k * 10 + l;// 三位
						int temp2 = i * temp1;
						// 将结果存入数组
						ex1 = Integer.toString(temp2).toCharArray();
						// 将当前数字存入数组,首先将它变为一个任意的数字,目的是方便存入char数组
						int te = i * 1000 + j * 100 + k * 10 + l;
						ex = Integer.toString(te).toCharArray();
						//

						Arrays.sort(ex);
						Arrays.sort(ex1);

						// 检查各位是否相等
						if (temp2 > 1000) {
							if (ex[0] == ex1[0] && ex[1] == ex1[1] && ex[2] == ex1[2] && ex[3] == ex1[3]) {
								System.out.println(i + "*" + temp1 + "=" + temp2);
								num1++;
							}
						}

					}
				}
			}
		}
		for (int i = 1; i <= 9; i++) {
			for (int j = 0; j <= 9; j++) {
				for (int k = 1; k <= 9; k++) {
					for (int l = 0; l <= 9; l++) {
						// 两位乘两位
						int temp3 = i * 10 + j;
						int temp4 = k * 10 + l;
						int temp5 = temp3 * temp4;
						// 将结果存入数组
						char[] ex2 = Integer.toString(temp5).toCharArray();
						Arrays.sort(ex2);

						// 将当前数字存入数组,首先将它变为一个任意的数字,目的是方便存入char数组
						int te = i * 1000 + j * 100 + k * 10 + l;
						ex = Integer.toString(te).toCharArray();
						Arrays.sort(ex);
						// 检查各位是否相等
						if (temp5 > 1000) {
							if (ex[0] == ex2[0] && ex[1] == ex2[1] && ex[2] == ex2[2] && ex[3] == ex2[3]) {
								System.out.println(temp3 + "*" + temp4 + "=" + temp5);
								num2++;
							}
						}
					}
				}
			}
		}
		// 将符合的情况相加,因为两位乘两位有乘法交换律,所以需要除二
		System.out.println(num1 + num2 / 2);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值