首页 > 其他 > 详细

蓝桥杯——历年真题之带分数

时间:2014-05-21 13:57:54      阅读:482      评论:0      收藏:0      [点我收藏+]

问题描述

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
 
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);
						}
					}
				}
		}
	}
}


 

 

蓝桥杯——历年真题之带分数,布布扣,bubuko.com

蓝桥杯——历年真题之带分数

原文:http://blog.csdn.net/hymanxq/article/details/26354471

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!