求0—7所能组成的奇数个数(每个数字只能出现一次)

方法一:

 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 }

 

posted @ 2020-09-27 15:45  气球i  阅读(818)  评论(0编辑  收藏  举报