一个整数的各种带分数表示
题目:
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。类似这样的带分数,100 有 11 种表示法。
输入格式:
从标准输入读入一个正整数N (N<1000*1000)
输出格式:
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
分析:
代码:
1 public class Algorithm0 { 2 private static int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 3 private static int sum; 4 private static int N = 613; 5 public static void main(String[] args) { 6 getNums(0); 7 } 8 private static void getNums(int i) { 9 if (i == 8) { 10 test(); 11 } 12 for (int j = i; j < 9; j++) { 13 Change(i, j); 14 getNums(i + 1); 15 Change(i, j); 16 } 17 } 18 private static void test() { 19 int first, two, three; 20 for (int i = 0; i < 7; i++) { 21 first = getNum(0, i); 22 if (first >= N) 23 break; 24 for (int j = i + 1; j < 8; j++) { 25 two = getNum(i + 1, j); 26 three = getNum(j + 1, 8); 27 if (two % three != 0) 28 continue; 29 if ((first + two / three) == N) { 30 sum++; 31 System.out.println("" + first + " + " + two + " / " + three); 32 } 33 } 34 } 35 } 36 private static int getNum(int i, int i2) { 37 int sum = 0; 38 for (int j = i; j <= i2; j++) { 39 sum *= 10; 40 sum += nums[j]; 41 } 42 return sum; 43 } 44 private static void Change(int i, int j) { 45 int temp = nums[i]; 46 nums[i] = nums[j]; 47 nums[j] = temp; 48 } 49 } 50