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,需要转成intint 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.mzph.cn/news/199382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能学习3(特征变换:特征数值化)

编译工具&#xff1a;PyCharm 有些编译工具不用写print可以直接将数据打印出来&#xff0c;pycharm需要写print才会打印出来。 文章目录 编译工具&#xff1a;PyCharm 概念1.特征类型分类型二值型顺序型数值型 2.特征数值化练习13.特征数值化练习24.特征二值化使用sklearn库自…

day69

今日回顾 Django与Ajax 一、什么是Ajax AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互&#xff0c;传输的数据为XML&#xff08;当然&#xff0c;传输的数据不只是XML,现在…

YOLOv8优化策略:简单高效的模块-现代反向残差移动模块 (iRMB) | | ICCV2023 EMO

🚀🚀🚀本文改进:设计了一种面向移动端应用的简单而高效的现代反向残差移动模块 (Inverted Residual Mobile Block, iRMB),它吸收了类似 CNN 的效率来模拟短距离依赖和类似 Transformer 的动态建模能力来学习长距离交互,引入YOLOV8 🚀🚀🚀YOLOv8改进专栏:http:…

三个角度(握手、挥手、传输)优化TCP

TCP 三次握手的性能提升 客户端的优化 当客户端发起 SYN 包时&#xff0c;可以通过 tcp_syn_retries 控制其重传的次数。 服务端的优化 当服务端 SYN 半连接队列溢出后&#xff0c;会导致后续连接被丢弃&#xff0c;可以通过 netstat -s 观察半连接队列溢出的情况&#xff0c;如…

【Java GUI 窗体开发实践】基于抽象模板设计模式下实现Windows SSH连接Linux服务器

系列文章目录 文章目录 系列文章目录一、项目实现功能二、使用步骤1.引入抽象类模板2.子类实现具体业务一、项目实现功能 Java GUI 本地输入需要连接的虚拟机 ip地址、端口号、用户名和密码就可以连接上主机。 后续基于SFTP协议传输文件到虚拟机或者在虚拟机上的文件更改,本地…

对标Gen-2!Meta发布新模型进军文生视频赛道

随着扩散模型的飞速发展&#xff0c;诞生了Midjourney、DALLE 3、Stable Difusion等一大批出色的文生图模型。但在文生视频领域却进步缓慢&#xff0c;因为文生视频多数采用逐帧生成的方式,这类自回归方法运算效率低下、成本高。 即便使用先生成关键帧,再生成中间帧新方法。如…

在线客服系统有哪些?如何选择呢?

当我们谈论在线客服系统时&#xff0c;我们可能会面临着一系列的问题和疑惑&#xff0c;比如&#xff1a; 在线客服系统有哪些&#xff1f; 如何选择合适的在线客服系统&#xff1f; 首先&#xff0c;让我们看看目前市场上存在的在线客服系统。这些系统包括但不限于&#xff1a…

Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库

Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库 文章目录 Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库一、前言二、编译环境三、示例C/CPP程序1、总体工程结构2、示例代码3、CMakeLists.txt&#xff08;重要&#xff09;4、…

Python中删除文件和目录

python中分别提供os包下的os.remove()与shutil包下的shutil.rmtree()函数&#xff0c;其中os.remove(&#xff09;的主要作用是删除一个具体的文件&#xff0c;shutil.rmtree()主要作用是删除一个具体的目录。 os.remove() 这个函数需要一个参数&#xff0c;即要删除的文件的…

Python语言基础学习大纲(由某大模型生成)

自从上次经丙察察游了一次滇藏线&#xff0c;已有3个没写一篇了。今天利用由某大模型生成的上面这张思维导图&#xff0c;配合这个大模型生成的6000多字拼凑出一篇博文聊以交差。 Python语言概述 一、语言特点 1.语法简单明了 Python的语法简洁易懂&#xff0c;使得编写代码…

12.5作业

1. #include <iostream>using namespace std;class Animal { private:string name; public:Animal(){}Animal(string name):name(name){cout << "animal" << endl;}virtual void perfrom(){cout << "实现不同表演行为" << …

CEPH搭建

目录 一、概述 特点 1、统一存储 2、高扩展性 3、可靠性强 4、高性能 二、准备工作 1、关闭防火墙 2、关闭图形网络管理器 3、配置静态ip 4、关闭selinux 5、修改主机名 6、修改设置 7、ssh免密设置 8、hosts文件修改 9、时间同步 10、添加磁盘&#xff0c;并…

RepidJson将内容格式化后写入文件

以下是使用RapidJson将JSON内容格式化后写入文件的示例代码&#xff1a; #include <iostream> #include <fstream> #include <string> #include "rapidjson/document.h" #include "rapidjson/prettywriter.h" #include "rapidjson…

Windows下安装Git和Git小乌龟

目录 Git简介 Git安装 Git小乌龟简介 Git小乌龟安装 Git简介 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地进行从很小到非常大的项目的版本管理。Git支持将本地仓库与远程仓库进行关联&#xff0c;实现多人协作开发。由于具有分布式版本控制、高效性、灵…

C++12.5

想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一位讲解员&#xff0c;他会为每种动物表演做简单的介绍。 在这个场景中&#xff0c;我们可以将动物比作是不同的类&#xff0c;而每种动物表演则…

HQX Customization Guide

QNX Hypervisor Customization Guide 80-PM231-1 qnx FDE配置 target/hypervisor/host/qcpe_config/8540/QCPE_config_8540_la.xml <fde_config><!-- Total Slots for Makena are 64, of which 10 are reserved --><!-- QNX_HOST --><vm id="HOST…

conda的使用教程总结

conda是一个包管理器和环境管理器&#xff0c;可以用于安装多个版本的Python及其相关的软件包&#xff0c;并且可以创建和管理不同的环境。下面是conda安装教程&#xff1a; 1 安装Anaconda&#xff1a; 首先需要下载并安装Anaconda&#xff0c;可以从官方网站(https://www.a…

【数据结构】链表OJ题(顺序表)(C语言实现)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

握这些员工管理技巧,助你打造高效团队!

人力资源是一个组织中至关重要的一环&#xff0c;而员工管理是确保团队高效运转的关键因素之一。一个优秀的经理需要具备多方面的技巧和能力&#xff0c;以便激发员工的潜力&#xff0c;促进合作和增加团队的效率。在这里&#xff0c;我将分享一些实用的员工管理技巧&#xff0…

Day41| Leetcode 343. 整数拆分 Leetcode 96. 不同的二叉搜索树

Leetcode 343. 整数拆分 题目链接 343 整数拆分 dp[i]的含义对i进行拆分&#xff0c;得到最大的整数 固定一个j用for循环来遍历&#xff0c;剩下的按照i-j来算&#xff0c;拆分成两个数是j*(i-j)&#xff0c;拆分为三个及其以上需要j*dp[i-j],下面上代码&#xff1a; class…