题目:将数字 1~ 9 分成 3 个三位数,要求第 2 个三位数是第1个三位数的两倍,第3个三位数是第1个的三倍。即假定m为第 1个三位数,则第2个恰好为2*m, 第3个为 3*m,请输出这几个三位数。
输入:第一个三位数的数字
输入:第一个三位数的数字
输出:满足题目条件的所有三位数
下面展示:超级暴力的枚举算法:
基本思路:
首先判断一个数的每一位都不同,同时每一位不为0,同时还要满足 第 2 个三位数是第1个三位数的两倍,第3个三位数是第1个的三倍
在判断3个3位数每一位都不相同。全部采用IF语句,特别适合新手看。
然后在循环的时候,起始的数应该是123,结束的数应该是987
package 三位数;
public class 三位数 {
public static void main(String[] args) {
int a = 0; //三个三位数
int b = 0;
int c = 0;
for (int i = 123; i <= 987; i++) {
int[] a1 = { 0, 0, 0 };
for (int j = 123; j <= 987; j++) {
int[] b1 = { 0, 0, 0 };
for (int k = 123; k <= 987; k++) {
int[] c1 = { 0, 0, 0 };
a = i;
b = j;
c = k;
if (c == (3 * a) && b == (2 * a)) {
a1[0] = a / 100; //分别表示a、b、c的每一位
a1[1] = (a % 100) / 10;
a1[2] = a % 10;
b1[0] = b / 100;
b1[1] = (b % 100) / 10;
b1[2] = b % 10;
c1[0] = c / 100;
c1[1] = (c % 100) / 10;
c1[2] = c % 10;
if (a1[0] != a1[1] && a1[0] != a1[2] && a1[1] != a1[2]
&& b1[0] != b1[1] && b1[0] != b1[2]
&& b1[1] != b1[2] && c1[0] != c1[1]
&& c1[0] != c1[2] && c1[1] != c1[2]
&& a1[0] != 0 && a1[0] != 0 && a1[1] != 0
&& b1[0] != 0 && b1[0] != 0 && b1[1] != 0
&& c1[0] != 0 && c1[0] != 0 && c1[1] != 0) {
if (a1[0] != b1[0] && a1[0] != b1[1]
&& a1[0] != b1[2] && a1[1] != b1[0]
&& a1[1] != b1[1] && a1[1] != b1[2]
&& a1[2] != b1[0] && a1[2] != b1[1]
&& a1[2] != b1[2] && a1[0] != c1[0]
&& a1[0] != c1[1] && a1[0] != c1[2]
&& a1[1] != c1[0] && a1[1] != c1[1]
&& a1[1] != c1[2] && a1[2] != c1[0]
&& a1[2] != c1[1] && a1[2] != c1[2]
&& b1[0] != c1[0] && b1[0] != c1[1]
&& b1[0] != c1[2] && b1[1] != c1[0]
&& b1[1] != c1[1] && b1[1] != c1[2]
&& b1[2] != c1[0] && b1[2] != c1[1]
&& b1[2] != c1[2]) {
System.out.println(a + " " + b + " " + c);
}
}
}
}
}
}
}
}
/*
运行结果;
192 384 576
219 438 657
273 546 819
327 654 981
*/