带分数

历届试题 带分数  

时间限制:1.0s   内存限制:256.0MB 
问题描述

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

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

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

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

输入格式

从标准输入读入一个正整数N (N<1000*1000)

输出格式

程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。

注意:不要求输出每个表示,只统计有多少表示法!

样例输入1
100
样例输出1
11
样例输入2
105
样例输出2
6
code:
 1 package com.zhj.prev;
 2 
 3 import java.util.Scanner;
 4 
 5 public class MixedNumbers {
 6     public static void main(String[] args) {
 7 
 8         Scanner mScanner = new Scanner(System.in);
 9         int n = mScanner.nextInt();
10         long startMili = System.currentTimeMillis();
11 
12         int i, j, k, count;
13         count = 0;
14         for (i = 1; i <= n - 1; i++)
15             for (k = 1; k <= 9999; k++) {
16                 if (i != k) {
17                     j = (n - i) * k;
18                     if (judge(i, j, k) == 1) {
19                         count++;
20                         System.out.println(n + "= " + i + " + " + j + "/" + k);
21                     }
22                 }
23             }
24         System.out.println(count + "种");
25 
26         long endMili = System.currentTimeMillis();
27         System.out.println(endMili - startMili + "ms");
28     }
29 
30     /**
31      * 判断整数i,j,k 中1-9数字是否出现,且只出现1次,是返回1,否则返回0
32      * 
33      * @param i
34      *            整数部分
35      * @param j
36      *            分子
37      * @param k
38      *            分母
39      * @return 返回1,符合题目带分数的要求,不符合返回0
40      */
41     public static int judge(int i, int j, int k) {
42         int[] num = new int[11];
43         int l, g;
44         for (l = 0; l < 10; l++) {
45             num[l] = 0;
46         }
47         while (i != 0) {
48             num[g = i % 10]++;
49             if (num[g] > 1)
50                 return 0;
51             i = i / 10;
52         }
53         while (j != 0) {
54             num[g = j % 10]++;
55             if (num[g] > 1) {
56                 return 0;
57             }
58             j = j / 10;
59         }
60         while (k != 0) {
61             num[g = k % 10]++;
62             if (num[g] > 1) {
63                 return 0;
64             }
65             k = k / 10;
66         }
67         // 判断是否包含有0
68         if (num[0] > 0) {
69             return 0;
70         }
71         // 判断是否有遗漏
72         for (l = 1; l < 10; l++) {
73             if (num[l] == 0) {
74                 return 0;
75             }
76         }
77         return 1;
78     }
79 
80 }

 -

 

posted @ 2015-04-06 18:24  HuijunZhang  阅读(293)  评论(0编辑  收藏  举报
中国