方法一:
1 public class Test05 { 2 public static void main(String[] args) { 3 ArrayList<Integer> list = new ArrayList<>(); //用来存放结果的集合 4 5 //0-7满足八进制条件且组合的上限是76543210,分别对应十进制中的0-16434824 6 for (int i = 0; i <= 16434824; i++) { //若只想保留7位数,i从2177399(010234567)开始结果为17280个 7 8 int num = toOctal(i); //用八进制的形式列出所有的组合可能,实际数值还是十进制 9 10 if (isRepeat(num) && num % 2 != 0) { //去掉位数重复或者偶数的组合 11 12 list.add(num); //满足条件的组合加入集合 13 } 14 } 15 show(list); //输出最后结果 16 } 17 18 //转换8进制形式 19 public static int toOctal(int num) { //不断除以8的方法 20 int value = 0; //存放结果 21 22 for (int i = num, j = 1; i != 0; i /= 8, j *= 10) { 23 if (j == 1) { 24 value = (i % 8); //个位数 25 } else { 26 value = (i % 8) * j + value; //依次是十位、百位…… 27 } 28 } 29 return value; 30 } 31 32 33 //判断位数重复(每个数字只出现一次) 34 public static boolean isRepeat(int num) { 35 ArrayList<Integer> list = new ArrayList<>(); //存放检查过的位数 36 37 for (int i = num; i != 0; i /= 10) { 38 int k = i % 10; //从个位开始,判断每个位数 39 40 for (Integer value : list) { 41 42 if (k == value) { //比较当前的是否与之前检查过的的有重复 43 return false; //有重复的,返回false 44 } 45 } 46 list.add(0, k); //与之前都不重复,加到集合,后面的在和它比较 47 } 48 return true; //所有位数检查完,无重复返回true 49 } 50 51 //打印结果 52 public static void show(ArrayList<Integer> list) { 53 System.out.println("0—7所能组成的奇数(每个数字只出现一次)一共有:" + list.size() + "个"); 54 55 for (int i = 0; i < list.size(); i++) { 56 System.out.print(list.get(i) + "\t"); 57 if ((i + 1) % 10 == 0) { 58 System.out.println(); //10个数换行 59 } 60 } 61 } 62 }
方法二:(该方法比较暴力)
1 public class Main7 { 2 public static void main(String[] args) { 3 int count = 0; 4 for (int i = 1; i <= 7; i++) {//最高位 5 for (int j = 0; j <= 7; j++) { 6 for (int k = 0; k <= 7; k++) { 7 for (int l = 0; l <= 7; l++) { 8 for (int m = 0; m <= 7; m++) { 9 for (int n = 0; n <= 7; n++) { 10 for (int p = 0; p <= 7; p++) { 11 for (int q = 0; q <= 7; q++) { 12 if (i != j && i != k && i != l && i != m && i != n && i != p && i != q) { 13 if (j != k && j != l && j != m && j != n && j != p && j != q) { 14 if (k != l && k != m && k != n && k != p && k != q) { 15 if (l != m && l != n && l != p && l != q) { 16 if (m != n && m != p && m != q) { 17 if (n != p && n != q) { 18 if (p != q) { 19 int temp = q + p * 10 + n * 100 + m * 1000 + l * 10000 + k * 100000 + j * 1000000 + i * 10000000; 20 if (temp % 2 != 0) { 21 System.out.println(temp); 22 count++; 23 } 24 } 25 } 26 } 27 } 28 } 29 } 30 } 31 } 32 } 33 } 34 } 35 } 36 } 37 } 38 } 39 System.out.println("奇数的个数是:" + count); 40 } 41 }
原文:https://www.cnblogs.com/qiqiu/p/13739946.html