您的位置:首页 > 其它

枚举法_寻找三位数

2015-11-24 21:56 211 查看
题目:将数字 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
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: