问题描述
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
import java.util.Scanner; public class Main{ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); N = scanner.nextInt(); cal(0); System.out.println(count); } static int N; static int n = 9; static int count; static int[] iarr = new int[n]; static boolean[] vis = new boolean[n]; static void cal(int p) { if (p == n) { // find String string = ""; for (int i : iarr) string += i + ""; jud(string); /* * System.out.print(string); System.out.println(); */ } else { for (int i = 0; i < vis.length; i++) { if (!vis[i] ) { vis[i] = true; iarr[p] = i + 1; cal(p + 1); vis[i] = false; } } } } static void jud(String string) { int len = (N + "").length(); for (int i = 0; i <= len; i++) { int a = Integer.parseInt(string.substring(0, i + 1)); if (a < N) for (int j = ((9 - i) / 2 + i); j < 9; j++) { long b = Long.parseLong(string.substring(i + 1, j)); long c = Long.parseLong(string.substring(j)); if (b % c != 0) { continue; } else { if (a + b / c == N) { count++; // System.out.println(a+" "+b+" "+c); } } } } } }
原文:http://blog.csdn.net/hymanxq/article/details/26354471