2024/3/17打卡带分数(第四节蓝桥杯)——全排列dfs

目录

题目

思路

代码


题目

100 可以表示为带分数的形式:100=3+\frac{69258}{714}

还可以表示为:100=82+\frac{3546}{197}

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

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

输入格式

一个正整数。

输出格式

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

数据范围

1≤N<10^6

输入样例1:

100

输出样例1:

11

输入样例2:

105

输出样例2:

6

思路

        问题求 不重不漏使用 0~9 中的数组成 a,b,c 三个数,要满足 N = a+\frac{b}{c} 。

        可以理解为0~9 如何排列 划分可以满足上述条件。

解决方法:

        对 0~9进行全排列  全排列——dfs(剪枝/回溯)-CSDN博客   ,对每个排列好的数通过二重循环来划分成三部分 ,组成 a,b,c 三个数。验证枚举出来的三个数是否满足题干条件,若满足则计数。

代码

import java.util.*;

class Main{
    static int N = 1000010;
    static int n;
    static boolean[] st = new boolean[10]; // 对0~9在全排列过程中做标记
    static long l,res;
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        dfs(0); // dfs对0~9进行全排列
        System.out.println(res);
    }
    // 全排列
    public static void dfs(int k){ // k计数
        if(k==9){ //k==9,排列完成
            calculate(l); // 对l进行划分
            return;
        }
        
        for(int i=1;i<=9;i++){
            if(!st[i]){
                l = l*10+i; 
                st[i] = true;
                dfs(k+1);
                l = l/10;
                st[i] = false;
            }
        }
        return;
    }
    
    // 将排列的数划分成三部分,判断是否满足条件
    public static void calculate(long l){
        for(int i=1;i<=7;i++){// 第一部分只能从1~7(7:需要留两个作为后面两部分)
            for(int j=i+1;j<9;j++){
                long x = l/(int)(Math.pow(10,9-i));
                long a = (l%(int)Math.pow(10,9-i))/(int)Math.pow(10,9-j);
                long b = l%(int)Math.pow(10,9-j);
                if(a/b+x==n&&a%b==0) res++;
            }
        }
    }
}

 

相关推荐

  1. -带分数

    2024-03-18 11:46:02       43 阅读
  2. -带分数

    2024-03-18 11:46:02       27 阅读
  3. 【[ 2013 省 B] 带分数

    2024-03-18 11:46:02       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-18 11:46:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-18 11:46:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-18 11:46:02       82 阅读
  4. Python语言-面向对象

    2024-03-18 11:46:02       91 阅读

热门阅读

  1. 前端小白的学习之路(事件流)

    2024-03-18 11:46:02       35 阅读
  2. 2024/03/16----面试中遇到的一些面试题

    2024-03-18 11:46:02       40 阅读
  3. 【Python】Flask上下文管理

    2024-03-18 11:46:02       43 阅读
  4. sparksql的SQL风格编程

    2024-03-18 11:46:02       43 阅读
  5. ES6:可迭代对象(Iterable object)

    2024-03-18 11:46:02       42 阅读
  6. SQL server 构建索引的demo

    2024-03-18 11:46:02       38 阅读
  7. ES6 数组常用方法

    2024-03-18 11:46:02       42 阅读
  8. 【Vue2源码】响应式原理

    2024-03-18 11:46:02       41 阅读
  9. HBase常用命令

    2024-03-18 11:46:02       36 阅读
  10. 安装vscode及插件

    2024-03-18 11:46:02       44 阅读
  11. SpringBoot整合ElasticSearch应用

    2024-03-18 11:46:02       35 阅读
  12. CSS学习

    2024-03-18 11:46:02       40 阅读