acwing1209.带分数暴力与优化(java版)

//n = a + b / c     n是确定的,只需找到其中两个。判断剩下一个数是否满足条件即可
//由题目条件可知,每个数不能重复使用,需要一个st全局数组判断每个数是否使用过
//递归实现排列型枚举,cn = ac + b
//对于枚举出来的每一个a,再去枚举每一个c,再在c的枚举里判断b是否满足条件
//dfs_a() 需要传入一个u,和a,u代表已经用了多少个数,枚举出来的a要作为dfs_c的参数
//在通过ac判断b是否满足条件时,会使用到st数组,需要对st数组进行备份
import java.util.*;
public class Main
{
    static int N = 10;
    static int target;
    static int ans; //表示最终结果
    static boolean[] st = new boolean[10];
    static boolean[] backup = new boolean[N];
    
    //得到a的组合排列,得到的数需要通过 a * 10 + i 来进入下一次循环
    //a的值由循环里的i决定,首次调用要在main函数里调用dfs_a(1,0)
    
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        target = sc.nextInt();
        dfs_a(1,0);
        System.out.print(ans);
    }
    
    public static void dfs_a(int u,int a)
    {
        
        if(a > target) return;
        
        if(a > 0) dfs_c(u,a,0);
        
        for(int i = 1;i <= 9;i ++)
        {
            if(!st[i])
            {
                st[i] = true;
                dfs_a(u + 1, a * 10 + i);
                st[i] = false;
            }
        }
    }
    
    //对于传进来的每一个a,取枚举c,再判断b是否满足条件
    public static void dfs_c(int u, int a, int c)
    {
        
        //a 和 c一共最多用8位
        if(u == 9) return;
        
        //每次调用c,看看传入的c是否满足条件
        if(check(a,c)) ans++;
        
        for(int i = 1;i <= 9;i ++)
        {
            if(!st[i])
            {
                st[i] = true;
                dfs_c(u + 1,a,c * 10 + i);
                st[i] = false;
            }
        }
    }
    
    public static boolean check(int a,int c)
    {
        long b = target * (long) c - a * c;
        if(b == 0 || c == 0) return false;
        //判断b之前,先对st数组进行备份
        backup = st.clone();
        //因为a,c通过同一个st数组枚举出来,因此ac不会重复
        while(b > 0)
        {
            //从最后一位开始,每次取出来判断
            //x是long,需要转成int
            int x = (int)(b % 10);
            b /= 10;
            if(x == 0 || backup[x]) return false;
            backup[x] = true;
        }
        
        //现在所有数已经不重复了,再判断是否所有数都用过
        for(int i = 1;i <= 9;i ++)
        {
            if(!backup[i]) return false;
        }
        return true;
    }
}

更改:check函数里要多判断 b < 0

法二:暴力枚举

//枚举9个数的全排列
//再拆分判断

import java.util.*;
public class Main
{
    static int target;  //输入样例
    static int N = 10;
    static int[] data = new int[N]; //存储全排列结果
    static boolean[] used = new boolean[N];
    static int cnt;    //输出结果

    public static int cal(int l ,int r)
    {
        int sum = 0;
        for(int i = l;i <= r;i++)
        {
            sum = sum * 10 + data[i];
        }
        return sum;
    }

    public static void dfs(int u)
    {

        if(u > 9)
        {
            for(int i = 1;i <= 7;i++)
            {
                for(int j = i + 1;j <= 8;j ++)
                {
                    int a = cal(1,i);
                    int b = cal(i + 1,j);
                    int c = cal(j + 1,9);
                    if(a * c + b == c * target) cnt++;
                }
            }
        }

        for(int i = 1;i <= 9;i++)
        {
            if(!used[i])
            {
                used[i] = true;
                data[u] = i;
                dfs(u + 1);
                used[i] = false;
            }
        }
    }
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        target = sc.nextInt();
        dfs(1);
        System.out.print(cnt);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/219114.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第四期丨酷雷曼无人机技能培训

第4期无人机技能培训 2023年10月25日&#xff0c;酷雷曼无人机技能培训及执照考试第四期成功举办&#xff0c;自7月份首期开办以来&#xff0c;已按照每月一期的惯例连续举办四期&#xff0c;取得了极为热烈的反响。 随着无人机培训的重要性及影响力逐渐扩大&#xff0c;参加培…

算法-贪心思想

贪心的思想非常不好解释&#xff0c;而且越使用权威的语言解释越难懂。而且做题的时候根据自己的理解可能直接做出来&#xff0c;但是非要解释一下怎么使用的贪心的话&#xff0c;就懵圈了。一般来说&#xff0c;贪心的题目没有固定的套路&#xff0c;一题一样&#xff0c;不过…

分享67个节日PPT,总有一款适合您

分享67个节日PPT&#xff0c;总有一款适合您 67个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1oU-UUCV_69e8Gp5Y6zrzVA?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

Spark---Spark on Hive

1、Spark On Hive的配置 1&#xff09;、在Spark客户端配置Hive On Spark 在Spark客户端安装包下spark-2.3.1/conf中创建文件hive-site.xml&#xff1a; 配置hive的metastore路径 <configuration><property><name>hive.metastore.uris</name><v…

关于对ArrayBlockingQueue 的AQS探究

1、介绍 条件队列是 AQS 中最容易被忽视的一个细节。大部分时候&#xff0c;我们都用不上条件队列&#xff0c;但是这并不说明条件队列就没有用处了&#xff0c;它反而是我们学习生产者-消费者模式的最佳教材。条件队列是指一个阻塞队列&#xff0c;其中的元素是等待某个条件成…

每日一题:LeetCode-75. 颜色分类

每日一题系列&#xff08;day 12&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

ROS 元功能包

ROS元功能包&#xff08;Metapackage&#xff09;是一种特殊的软件包&#xff0c;它本身并不包含任何可执行代码或数据文件。在ROS 1中&#xff0c;可以通过catkin_create_pkg命令创建元功能包。 相反&#xff0c;它的主要目的是作为一组相关功能包的集合或者依赖关系列表。使…

蓝桥杯每日一题2023.12.5

题目描述 1.一步之遥 - 蓝桥云课 (lanqiao.cn) 题目分析 对于本题遵循多了就减少了就加的原则&#xff0c;用while进行计算即可 #include<bits/stdc.h> using namespace std; int x, ans; int main() {while(x ! 1){if(x < 1)x 97;else x - 127;ans ;}cout <&…

vue-cli创建项目运行报错this[kHandle] = new _Hash(algorithm, xofLen);(完美解决)

1&#xff1a;问题出现的原因 出现这个问题是node.js 的版本问题&#xff0c;因为 node.js V17开始版本中发布的是OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制&#xff0c;可能会对生态系统造成一些影响。故此以前的项目在使用 nodejs V17以上版本后会报错。…

使用VBA快速统计词组(单词组合)词频

实例需求&#xff1a;产品清单如A列所示&#xff0c;现在如下统计词组词频。想必各位小伙伴都指定如何使用字典对象实现去重&#xff0c;进而实现单个单词的词频统计。 但是统计词组词频就没有那么简单了&#xff0c;为了便于演示&#xff0c;此处的词组只限于两个单词的组合。…

阿里云Arthas使用——在日志没有输出异常情况下,如何进行线上bug定位 stack命令 和 trace命令

前言 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类…

深入理解:指针变量的解引用 与 加法运算

前言 指针变量的解引用和加法运算是非常高频的考点&#xff0c;也是难点&#xff0c;因为对初学者的不友好&#xff0c;这就导致了各大考试都很喜欢在这里出题&#xff0c;通常会伴随着强制类型转换、二维数组、数组指针等一起考查大家对指针的理解。但是不要怕&#xff0c;也许…

托盘四向穿梭车自动化密集库供应|单机智能向系统智能跨越的HEGERLS托盘四向车系统

随着物流产业的迅猛发展&#xff0c;托盘四向穿梭式自动化密集仓储系统可认为是在穿梭车货架系统基础上提出的一种新仓储概念。托盘四向穿梭式立体库因其在流通仓储体系中所具有的高效密集存储功能优势、运作成本优势与系统化智能化管理优势&#xff0c;已发展为仓储物流的主流…

契约锁2023年伙伴大会连下58城,顺利收官!

10月以来&#xff0c;携手全国58城的IT伙伴&#xff0c;共同探讨电子签章海量市场下的发展机遇以及合作模式、交流分享电子签章海量市场机遇、体验电子签章产品在组织数字化建设中的应用价值。 以简单易用、方便实施的产品&#xff0c;和开放共享政策&#xff0c;广结伙伴、共建…

常用汇编指令集

寄存器 如上是OD展示的寄存器&#xff0c;逐条说明常用的寄存器和标志位含义&#xff1a; EIP&#xff1a;寄存器指向即将要执行的指令的地址&#xff08;EIP中的地址&#xff0c;就是下一步要执行指令的地址&#xff09; ESP&#xff1a;里面的内容永远指向堆栈的最顶端 EAX&…

浪涌保护器参数指南:浪涌保护器行业选型方案

浪涌保护器&#xff08;SPD&#xff09;是一种用于限制瞬态过电压和泄放浪涌电流的器件&#xff0c;可有效降低电子设备在雷击、电源故障等情况下受到的损害。其主要作用是当系统发生浪涌时&#xff0c;将过电压、过电流泄放到大地&#xff0c;从而保护设备和人身安全。然而浪涌…

微表情检测(一)----LGAttNet论文总结

LGAttNet: Automatic microexpression detection using dualstream local and global attentions Abstract 微表情识别之前需要先进行微表情的检测。我们提出了一种基于双重注意力网络的微表情检测架构&#xff0c;称为LGAttNet。LGAttNet是第一个利用与二维卷积神经网络组合的…

虚拟机-桥接模式连接

文章目录 1.查看宿主机再用的IP信息2.桥接模式-虚拟机设置VMware设置虚拟机设置重启网络服务 1.查看宿主机再用的IP信息 ipconfig /all 注&#xff1a; 在虚拟机中要设置同网段的ip设置同一个子网掩码设置同一个网关设置同一个DNS服务器 2.桥接模式-虚拟机设置 VMware设置 虚…

从零开始学习 JS APL(五):完整指南和实例解析

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 学习内容&#xff1a; Window对象&#xff1a; 定时器-延时函数&#xff1a; JS 执行机制&#xff1a; location对象&#xff1a; 本地存储&#xff1a; 本地存储分类- localStorage&#xff1a…

代码签名的工作原理

代码签名的基础是PKI安全体系。代码签名证书由签名证书私钥和公钥证书两部分组成。私钥用于代码的签名&#xff0c;公钥用于私钥签名的验证和证书持有者的身份识别。 1. 发布者从CA机构&#xff08;如JoySSL&#xff09;申请数字证书&#xff1b; 2. 发布者开发出代码&#x…
最新文章