枚举法_寻找三位数

来源:互联网 发布:php设计模式有哪些 编辑:程序博客网 时间:2024/04/29 16:39
题目:将数字 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 576219 438 657273 546 819327 654 981*/


0 0