【Java版oj】day30最难的问题、因子个数

news2024/12/28 5:38:05

目录

 一、最难的问题

(1)原题再现

(2)问题分析

(3)完整代码

 二、因子个数

(1)原题再现

(2)问题分析

(3)完整代码

三、DFS深度优先列举所有可能的情况


 一、最难的问题

(1)原题再现

最难的问题__牛客网

        NowCoder生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是军团中的一名军官,需要把发送来的消息破译出来、并提
供给你的将军。
        消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A 都分别替换成字母F),其他字符不 变,并且消息原文的所有字母都是大写的。密码中的字母与原文中的字母对应关系如下。
密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

 

输入描述:

输入包括多组数据,每组数据一行,为收到的密文。

密文仅有空格和大写字母组成。

 

输出描述:

对应每一组数据,输出解密后的明文。

示例1

输入

HELLO WORLD

SNHJ

输出

CZGGJ RJMGY

NICE

(2)问题分析

     这道题没什么难度,就是一个简单的查找对应问题。用两个数组分别存储明文和密文,下标一一对应查找一下就可以。

(3)完整代码

import java.util.*;
/*
 * 最难的问题
 */
public class Main {
	static char[]strArr= {'A', 'B','C','D','E','F','G','H','I','J',
			'K','L','M','N','O','P','Q','R','S','T',
			'U','V','W','X','Y','Z'};
	static char[]resArr= {'V','W','X','Y','Z','A', 'B','C','D','E','F','G','H','I','J',
			'K','L','M','N','O','P','Q','R','S','T','U'};
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNextLine()) {
			String str=sc.nextLine();
			StringBuilder sb=new StringBuilder();
			
			for(int i=0;i<str.length();i++) {
				int index=myIndexOf(str.charAt(i), strArr);
				if(index!=-1) {
					sb=sb.append(resArr[index]);
				}else {
					sb=sb.append(str.charAt(i));
				}
			}
			System.out.println(sb.toString().trim());
		}
	}
	public  static int myIndexOf(char c,char[]str) {
		for(int i=0;i<str.length;i++ ) {
			if(c==str[i]) {
				return i;
			}
		}
		return -1;
	}
}

 二、因子个数

(1)原题再现

因子个数__牛客网

        一个正整数可以分解成一个或多个数组的积。例如36=2*2*3*3,即包含2和3两个因子。NowCoder最近在研究因子个数的分布规律,现在给出一系列正整数,他希望你开发一个程序输出每个正整数的因子个数。

 

输入描述:

输入包括多组数据。

每组数据仅有一个整数n (2≤n≤100000)。

 

输出描述:

对应每个整数,输出其因子个数,每个结果占一行。

示例1

输入

30

26

20

输出

3

2

2

(2)问题分析

       我首先想到的DFS深度优先算法,把所有组合情况列举出来,但是会造成超时错误。我会把DFS的代码放到文末,有兴趣的同学可以感受一下深度优先的魅力。

        其实这道题其实可以很简单。从最小因子2到数字的最大因子数即数字的平方根开始判断是否能够取余,可以则循环取余直到取余不为0,因子个数+1;否则使用下一个因子计算;最终整除了各个因子数之后剩余的数字不为1则本身也是一个因子,因此因子数+1。

(3)完整代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int count = 0;
            for (int i = 2; i <= Math.sqrt(n); i++) {
                if (n % i == 0) {
                    while (n % i == 0) {
                        n /= i;
                    }
                    count++;
                }
            }
            if (n != 1) {
                count++;
            }
            System.out.println(count);
        }
    }
}

三、DFS深度优先列举所有可能的情况

import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
/*
 * 因子个数
 */
//超时但是结果都对
public class NumberOfFactors {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {      
        	 int num = sc.nextInt();
            List <Integer>list = new LinkedList<>();
            for (int i = 1; i <= num; i++) { //1~num有多少个质数
                int temp = isFactor(i);
                if (temp != -1) { //是质数加入列表
                    list.add(temp);
                }
            }

            List<Integer>one = new LinkedList<>();
            List<List<Integer>>res = new LinkedList<>();
            DFS(0, num, 1, list, one, res);
           int min=Integer.MAX_VALUE;
           int tmp=0;
           int i=0;
            for (i = 0; i < res.size(); i++) {
            	if(min>res.get(i).size()) {
            		min=res.get(i).size();
            		tmp=i;//保存长度最小的组合链表的下标(其实就一种)
            	}
            }
//其实这里有个小bug,链表长度最短的不代表因子数就是最少的!
//但是其实我们可以不用管,做完之后就会发现,每个res结果集中只会有一种组合,根本不存在多种可能。
            Set<Integer> set=new HashSet<>();//用set集合达到去重的效果,比如8=2*2*2*2;因子数为1
            for(int j=0;j<res.get(tmp).size();j++) {
            	set.add(res.get(tmp).get(j));
            }
            System.out.print(set.size()+" ");
        }
    }
    public static void DFS(int index, int num, int mulRes, List<Integer>list,List<Integer> one, List<List<Integer>> res) {
        //num目标值,list所有比num小的质数集合,one存放一种正确的组合,res结果集合;每一种正确的组合都放进结果集,mulRes当前的数,index下标位置
        if (mulRes > num) {
            return;//当前值大于目标值就返回
        }
        if (mulRes == num) {//当前值等于目标值,表示这个组合正确,是我们想要的
            List<Integer> temp = new
            LinkedList<>(); //临时变量,将一种组合放入结果集
            for (int i = 0; i < one.size(); i++) {
                temp.add(one.get(i));
            }
            res.add(temp);
            return;
        }
        for (int i = index; i < list.size(); i++) {
            if (mulRes > num) {
                continue;//如果当前值大于目标值就下一个,但是本题按顺序排的不会出现这种情况,可以不写
            }
            one.add(list.get(i));
            DFS(i, num, mulRes * list.get(i), list, one, res);
            one.remove(one.size() -1); //回溯,当前值如果大于等于就要回到上一步,然后不合适的质数删去走下一步
        }
    }
    public static int isFactor(int num) {//判断某个数是否为质数
        if (num == 1) {
            return -1;
        }
        if (num == 2) {
            return 2;
        }
        for (int i = 2; i < num; i++) {
            if (num % i == 0) {
                return -1;//不是返回-1
            }
        }
        return num;//是返回该值
    }
}

 

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

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

相关文章

Python实现批量图片下载及去重处理

背景 在爬虫应用开发中&#xff0c;常常需要批量下载图片&#xff0c;并对图片进行去重处理。Python 是一种非常流行的编程语言&#xff0c;也是开发爬虫应用的首选&#xff0c;本文将介绍如何使用 Python 下载图片&#xff0c;并对下载的图片进行去重处理。 内容 首先&…

win10彻底永久关闭自动更新【亲测有效】

一、禁用Windows Update服务 1、同时按下键盘 Win R&#xff0c;打开运行对话框&#xff0c;然后输入命令 services.msc &#xff0c;点击下方的“确定”打开服务&#xff0c;如下图所示。 2、找到 Windows Update 这一项&#xff0c;并双击打开&#xff0c;如图所示。 3、右击…

【行为型模式】责任链模式

文章目录1、简介2、结构3、实现方式3.1、案例引入3.2、结构分析3.3、具体实现4、责任链优缺点5、应用场景1、简介 责任链模式(Chain of Responsibility)是一种行为型设计模式&#xff0c;它允许对象在链上依次处理请求&#xff0c;用户只需要将请求发送到责任链上即可&#xf…

CocosCreator实战篇 | 实现刮刮卡和橡皮擦 | 擦除效果

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/dxt19980308 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由肩匣与橘编写&#xff0c;首发于CSDN&#x1f649; &#x1f4e2;生活依旧是美好而…

【SSM框架】spring的创建与使用

spring的创建与使用Spring项目的创建创建一个maven项目添加Spring依赖添加启动类将bean存储到Spring 中创建bean对象将bean对象存储到Spring容器中从Spring中获取bean创建Spring(上下文)对象从Spring中获取到bean对象使用Bean&#xff08;非必须&#xff09;从spring中获取Bean…

奇瑞版Model 3与Model Y登场:正式进军高端纯电

作者 | Amy 编辑 | 德新4月7日&#xff0c;奇瑞在北京举办「新能源之夜」。整场发布会都在传递一个讯息&#xff1a;奇瑞搞新能源&#xff0c;要大搞特搞&#xff01; 奇瑞在这场发布会上&#xff0c;对新能源的战略、技术、品牌和产品作了全面梳理。其中最引人注目的是&#x…

环信web、uniapp、微信小程序sdk报错详解---注册篇(二、三)

项目场景&#xff1a; 记录对接环信sdk时遇到的一系列问题&#xff0c;总结一下避免大家再次踩坑。这里主要针对于web、uniapp、微信小程序在对接环信sdk时遇到的问题。 注册篇(二) 注册用户报错400 原因分析&#xff1a; 从console控制台输出及network请求返回入手分析 可以看…

【三十天精通Vue 3】第十一天 Vue 3 过渡和动画详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 过度和动画概述1.1过度和动画的简介二、Vue 3 过度2…

Java 集合框架面试问题集锦

Java集合框架&#xff08;例如基本的数据结构&#xff09;里包含了最常见的Java常见面试问题。很好地理解集合框架&#xff0c;可以帮助你理解和利用Java的一些高级特性。下面是面试Java核心技术的一些很实用的问题。 Q&#xff1a;最常见的数据结构有哪些&#xff0c;在哪些场…

telnet远程管理linux主机及Zlib、openssl、openssh升级

目录 一、telnet远程管理主机 1、检查是否安装telnet 2、安装telnet服务 3、测试telnet登录 二、zlib、openssl、openssh升级 1、下载zlib包 2、下载openssl包 3、下载openssh包 4、 编译安装zlib 5、编译安装openssl 6、准备升级openssh环境 ①注意必须使用telne…

LLM 快人一步的秘籍 —— Zilliz Cloud,热门功能详解来啦!

最近&#xff0c;我们发布了可处理十亿级向量数据的 Zilliz Cloud GA 版本&#xff0c;为用户提供开箱即用的向量数据库服务&#xff0c;大大降低了数据库的运维成本。 看过上一篇文章《可处理十亿级向量数据&#xff01;Zilliz Cloud GA 版本正式发布》的朋友们知道&#xff0…

【SSM】Spring6(十.面向切面编程AOP)

文章目录1.AOP2. AOP的七大术语3. 切点表达式4.使用Spring的AOP4.1 环境准备4.2 基于AspectJ的AOP注解式开发步骤4.3 所有通知类型4.4 切面顺序4.5 通用切点4.6 获取目标方法的方法签名4.7 全注解式开发4.8 基于XML配置的AOP5. 案例&#xff1a;事务处理1.AOP 将与核心业务无关…

Visual Studio Code跳转到CSS定义

Visual Studio Code 快速跳转到 VUE文件 或 CSS文件的定义位置&#xff08;跳转到class定义&#xff0c;跳转到css定义&#xff09;&#xff0c;插件Css Peek、Vue Peek 对提升开发效率上&#xff0c;事半功倍。 目录 1、跳转到CSS定义 1.1、CSS Peek 1.2、Vue Peek 2、其他…

舌体胖瘦的自动分析-曲线拟合-或许是最简单判断舌形的方案(六)

返回至系列文章导航博客 1 简介 在中医智能舌诊项目中需要舌体胖瘦的自动分析 舌体胖瘦是中医诊断中重要的观察依据&#xff0c;。胖大舌“舌色淡白&#xff0c;舌体胖嫩&#xff0c;比正常舌大而厚&#xff0c;甚至充满口腔”&#xff0c;主脾肾阳虚&#xff0c;气化失常&am…

C++无符号整型与有符号整型变量的运算-不简单

示例分析&#xff1a; #include<iostream> #include <stdio.h>struct Result {char c;char d;unsigned char e; };Result getChar(int x, int y) {Result res;unsigned int a x;(a y > 10) ? (res.c 1) : (res.c 2);res.d a y;res.e a y;return res; …

RHCE第一次作业at和cront两个任务管理程序的区别

1.at 单一执行的例行性工作&#xff1a;仅处理执行一次就结束了 -m 当任务完成之后&#xff0c;即使没有标准输出&#xff0c;将给用户发送邮件 -l atq的别名&#xff0c;可列出目前系统上面的所有该用户的at调度 -d atrm的别名,可以取消一个在at调度中的工作 -v 使用较明显的…

基于html+css的图片展示11

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

信息安全保障人员CISAW认证基础级、专业级通用认证条件

信息安全保障人员认证&#xff08;Certified Information Security Assurance Worker&#xff0c;简称“CISAW”&#xff09;是中国网络安全审查技术与认证中心针对信息安全保障领域不同专业技术方向、应用方向和保障岗位&#xff0c;依据国际标准ISO/IEC 17024《人员认证机构通…

HTTPS-TSL握手

HTTP一般基于TCP协议&#xff0c;而HTTPS就是在这之间加了SSL/TLS协议&#xff0c;那么在TCP三次握手建立TCP连接后&#xff0c;就需要TLS握手建立SSL/TLS连接。 TLS握手-流程 &#xff08;基于RSA算法&#xff09; &#xff08;1&#xff09;首先&#xff0c;客户端向服务器发…

Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】

Unity学习参考文档和开发工具 ☺ unity的官网文档&#xff1a;https://docs.unity3d.com/cn/current/Manual/ScriptingSection.html ■ 学习方式&#xff1a; 首先了解unity相关概述&#xff0c;快速认识unity编辑器&#xff0c;然后抓住重点的学&#xff1a;游戏对象、组件|…