蓝桥杯2013年第四届真题-带分数

简介: 蓝桥杯2013年第四届真题-带分数

题目描述


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

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

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

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


输入格式


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


输出格式


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

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


样例输入


100  


样例输出


11


import java.util.Scanner;
public class Main {
    static int number;  //统计次数
    static int n;       //输入的正整数
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n= sc.nextInt();
        int []arr={1,2,3,4,5,6,7,8,9};
        dfs(0,arr);
        System.out.println(number);
    }
    public static void dfs(int i,int []arr){
        if(i==arr.length-1){//如果找到一种排列组合就检查是否满足
            check(arr);
            return;
        }
        for (int j = i; j < arr.length; j++) { //i后的每一位数字都有可能出现在i位置构成一种排序
          swap(arr,i,j);
          dfs(i+1,arr);
          swap(arr,i,j);//回溯
        }
    }
    public static void check(int []arr){
        //检查整数部分,整数可能1位也可能7位
        for (int i = 1; i <=7; i++) {
            int num1 = toint(arr, 0, i);
            if (num1 >= n) {
                continue;
            }
            //检查除法部分,分子一定大于分母,后面位数受前面影响
            for (int j = 1; j < 9 - i;j++){
             int num2=toint(arr,i,i+j);
             int num3=toint(arr,i+j,9);
             //分子除以分母一定是整数倍,验证结果是否为n
             if(num2%num3==0 &&num3!=0 &&num1+num2/num3==n){
                number++;
             }
            }
        }
    }
    public static int toint(int []arr,int start,int end){
        int result=0;
        int t=1;//乘数因子
        for (int i = end-1; i >=start; i--) {
         result+=arr[i]*t;
         t*=10;
        }
            return result;
    }
    public static void swap(int[] arr,int i,int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}


相关文章
|
Python
蓝桥杯-带分数-python
蓝桥杯-带分数-python
82 0
蓝桥杯:带分数
蓝桥杯:带分数
74 0
|
Java 编译器 C++
蓝桥杯——2013第四届C/C++真题[省赛][B组](一)
蓝桥杯——2013第四届C/C++真题[省赛][B组]
蓝桥杯——2013第四届C/C++真题[省赛][B组](一)
|
算法 搜索推荐 编译器
蓝桥杯——2013第四届C/C++真题[省赛][B组](二)
蓝桥杯——2013第四届C/C++真题[省赛][B组]
单片机比赛准备06-蓝桥杯-第四届初赛模拟题(自动售水机)
单片机比赛准备06-蓝桥杯-第四届初赛模拟题(自动售水机)
144 0
单片机比赛准备06-蓝桥杯-第四届初赛模拟题(自动售水机)
|
人工智能
蓝桥杯 历届试题 带分数
历届试题 带分数 时间限制:1.0s 内存限制:256.0MB 问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714。 还可以表示为:100 = 82 + 3546 / 197。
828 0
|
人工智能 C++
2013第四届蓝桥杯 C/C++本科A组 真题答案解析【交流帖】
今年的蓝桥杯又已经结束了,做的还是不怎么样,很多题目不难但就是算不出最终的结果,很是纠结,看来路还很长,另外昨天(2013-5-7)也受到了也受到了微软的thank you letter了,哎,都是苦逼的一天。不说了,直接看题吧,如果你对我的做法有异议或者有更好的解法,请给我留言,我会及时更新~~~~~ <h1>1.高斯日记</h1> <p> 大数学家高斯有个好习惯:无论如何都要记日记
2012 0
|
6月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
107 0
|
6月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
82 0