历届试题 带分数
时间限制: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 }
-