首页 > 代码库 > 历届试题 带分数_JAVA_全排列模板

历届试题 带分数_JAVA_全排列模板


标题:带分数

    100 可以表示为带分数的形式:100 = 3 + 69258 / 714

    还可以表示为:100 = 82 + 3546 / 197

    注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。

    类似这样的带分数,100 有 11 种表示法。

题目要求:
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!


例如:
用户输入:
100
程序输出:
11

再例如:
用户输入:
105
程序输出:
6


资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗  < 3000ms

 

这一题主要是熟悉全排列和数字的组合。

 1 import java.util.Scanner;
 2 
 3 public class A {
 4 
 5     static int vis[] = new int[1000 * 1001];
 6     static int a, b, c, ans;
 7 
 8     public static void main(String[] args) {
 9         int[] num = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9 };
10         Scanner scanner = new Scanner(System.in);
11         int n = scanner.nextInt();
12         per(num, 0);
13         System.out.println(vis[n]);
14     }
15 
16     public static void per(int[] num, int start) {
17         if (start == num.length) {
18             ser(num);
19             return;
20         }
21         for (int i = start; i < num.length; i++) {
22             swap(num, start, i);
23             per(num, start + 1);
24             swap(num, start, i);
25         }
26     }
27 
28     public static void swap(int[] num, int n, int m) {
29         int t = num[n];
30         num[n] = num[m];
31         num[m] = t;
32     }
33 
34     public static void ser(int[] num) {
35         for (int i = 0; i <= 6; i++) {
36             for (int j = i + 1; j <= 7; j++) {
37                 a = 0;
38                 b = 0;
39                 c = 0;
40                 ans = 0;
41                 for (int k = 0; k <= i; k++) {
42                     a = a * 10 + num[k];
43                 }
44                 for (int k = i + 1; k <= j; k++) {
45                     b = b * 10 + num[k];
46                 }
47                 for (int k = j + 1; k <= 8; k++) {
48                     c = c * 10 + num[k];
49                 }
50                 if (b % c == 0) {
51                     ans = a + b / c;
52                     if (ans < 1000000)
53                         vis[ans]++;
54                 }
55             }
56         }
57     }
58 
59 }

 

历届试题 带分数_JAVA_全排列模板