• Java实现 蓝桥杯 历届试题 带分数


    问题描述
    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.Arrays;
    import java.util.Scanner;
    import java.util.Stack;
    
    public class Daifenshu {
    
        public static int count = 0;
        public static int N, len;
    
        public static void swap(int[] arrayA, int i, int j) {
            int temp = arrayA[i];
            arrayA[i] = arrayA[j];
            arrayA[j] = temp;
        }
    
        public static void dfs(int[] arrayA, int step) {
            if(step == arrayA.length) {
                check(arrayA);
                return;
            } else {
                for(int i = step;i < arrayA.length;i++) {
                    swap(arrayA, i, step);
                    dfs(arrayA, step + 1);
                    swap(arrayA, i, step);
                }
            }
        }
    
        public static void check(int[] A) {
            for(int j = 1;j <= len;j++) {
                int a = A[0];
                for(int i = 1;i < j;i++) {
                    a = a * 10;
                    a = a + A[i];
                }
                if(a >= N)
                    break;
                for(int k = (9 + j) / 2;k < 9;k++) {
                    int b = A[j];
                    for(int i = j + 1;i < k;i++) {
                        b = b * 10;
                        b = b + A[i];
                    }
                    int c = A[k];
                    for(int i = k + 1;i < 9;i++) {
                        c = c * 10;
                        c = c + A[i];
                    }
                    if(a * c + b == N * c)
                        count++;
                }
            }
        }
    
        public static void main(String[] args) {
    
            Scanner in = new Scanner(System.in);
            N = in.nextInt();
            int[] A = {1,2,3,4,5,6,7,8,9};
            String number = N + "";
            len = number.length();
             dfs(A, 0);
            System.out.println(count);
        }
        }
    
    
  • 相关阅读:
    算法时间复杂度分析基础
    哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
    数学之美番外篇:快排为什么那样快
    R树空间索引
    二叉树的先序/中序/后序/层次遍历
    二叉排序树的建立、先序/中序/后序遍历、查找
    spring利用xml和注解形式实现定时任务
    javabean转成json字符首字母大写
    简单了解动静分离和前后端分离
    长连接与短连接
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077674.html
Copyright © 2020-2023  润新知