解题思路:
虽然写的有点麻烦,但都是根据自己的思路一步一步往下走的,希望可以理解
注意事项:
参考代码:
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; }//回溯,将数组变回调用前的样子 } } } }
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:863 |
C二级辅导-统计字符 (C语言代码)浏览:514 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:732 |
最好的,浏览:601 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:501 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:841 |
小九九 (C++代码)简单粗暴,直接输出浏览:683 |
C二级辅导-统计字符 (C语言描述——用函数求解)浏览:1229 |
C二级辅导-阶乘数列 (C语言代码)浏览:1831 |
简单的a+b (C语言代码)浏览:443 |