解题思路:

虽然写的有点麻烦,但都是根据自己的思路一步一步往下走的,希望可以理解



注意事项:





参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.util.Arrays;
import java.util.Scanner;
 
public class Main {
    static int a[] = new int[7];
    static int sum[] = new int[10000];
    static int x = 0;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = 0;
        if (n == 0)
            System.out.println(0);
        while (n != 0) {
            a[k] = n % 10;//将输入的数字每一位都储存在数组a中
            n /= 10;
            k++;
        }
        Arrays.sort(a, 0, k);//对数组a进行排序
        f(0, k - 1);//调用函数
        Arrays.sort(sum, 0, x);//对数组sum进行排序
        for (int j = 0; j < x; j++) {
            if (sum[j] == sum[j + 1])//两个数相等时只输出一个
                continue;
           /**控制字符输出的位数与输入时位数一致*/
            if (k == 1)
                System.out.printf("%d\n", sum[j]);
            else if (k == 2)
                System.out.printf("%02d\n", sum[j]);
            else if (k == 3)
                System.out.printf("%03d\n", sum[j]);
            else if (k == 4)
                System.out.printf("%04d\n", sum[j]);
            else if (k == 5)
                System.out.printf("%05d\n", sum[j]);
            else if (k == 6)
                System.out.printf("%06d\n", sum[j]);
        }
    }
    private static void f(int k, int m) {
        int i, t;
        if (k == m) {//k=n即a中数字排列完一次时
            for (i = 0; i <= m; i++) {
                sum[x] = a[i] + sum[x] * 10;//将数组a中数字合并成一个整数储存在数组sum中
            }
            x++;
        else {
            for (i = k; i <= m; i++) {
                for (int j = i - 1; j >= k; j--) 
                {
                    t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }//循环向前交换数组a中的数字
                f(k + 1, m);
                for (int j = k; j <= i - 1; j++) 
                {
                    t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }//回溯,将数组变回调用前的样子
            }
        }
    }
}


点赞(2)
 

9.9 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论