浙江大学PAT (Basic Level) Practice (中文)1005继续(3n+1)猜想JAVA实现代码及分析
1005
继续(3n+1)猜想
卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。
当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他数字所覆盖。
现在给定一系列待验证的数字,我们只需要验证其中的几个关键数,就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字,并按从大到小的顺序输出它们。
输入格式:
每个测试输入包含 1 个测试用例,第 1 行给出一个正整数 K (<100),第 2 行给出 K 个互不相同的待验证的正整数 n (1<n≤100)的值,数字间用空格隔开。
输出格式:
每个测试用例的输出占一行,按从大到小的顺序输出关键数字。数字间用 1 个空格隔开,但一行中最后一个数字后没有空格。
这道题是在1001的基础之上进行了一定的扩展,在验证一个数的同时也顺便验证了其他多个数,题目的要求就是要我们找出这些数,并从输入的数列中去掉这些存在多次验证的数,只保留下那些必须去验证的关键数,最后将关键数排成从大到小的顺序输出。JAVA的集合可以比较方便的完成这一任务,最后随便采用一种排序方式进行排序即可。
实现代码如下:
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;public class Main {static Set<Integer> set=new HashSet<Integer>();public static void main (String[]args) {int K=0;int n[]=new int[101];int m[]=new int[101];int j=0;Scanner input=new Scanner(System.in);K=input.nextInt();for(int i=0;i<K;i++){n[i]=input.nextInt();cal(n[i]);}for(int i=0;i<K;i++){Iterator<Integer> it = set.iterator();while (it.hasNext()) { int temp=it.next();if(temp==n[i])break;} if(!it.hasNext()){m[j]=n[i];j++;}}for(int i=0;i<j;i++){int temp=m[i];int temp2;for(int ii=i+1;ii<j;ii++){if(temp<m[ii]){temp2=m[ii];m[ii]=temp;temp=temp2;}}m[i]=temp;if(i<j-1){System.out.print(m[i]+" ");}else {System.out.print(m[i]);}}}public static void cal(int n){while(n!=1){if(n%2==0){n=n/2;set.add(n);continue;}if(n%2!=0){n=3*n+1;n=n/2;set.add(n);continue;}}}
}
浙江大学PAT (Basic Level) Practice (中文)1005继续(3n+1)猜想JAVA实现代码及分析相关推荐
- PTA平台 · PAT(Basic Level) Practice(中文) 题目集
前 言 ※ PTA是 程序设计类实验辅助教学平台 ,里边包含一些编程题目集以供练习. ※ PAT是 浙江大学计算机程序设计能力考试(Programming Ability Test),分为乙级( ...
- 浙江大学PAT (Basic Level) Practice (中文)1014福尔摩斯的约会JAVA实现代码及分析
1014 福尔摩斯的约会 这道题需要注意的地方有以下几点: ①决定星期几的是前两个字符串的第一个相同的大写字母,注意是第一个大写的字母,小写不算. ②决定分钟数的是后两对字符串的第一个相同的字母所出现 ...
- PAT (Basic Level) Practice (中文)1058 选择题 (20 分)
PAT (Basic Level) Practice (中文)1058 选择题 (20 分) 文章目录 PAT (Basic Level) Practice (中文)1058 选择题 (20 分) 题 ...
- 【题解】PAT (Basic Level) Practice (中文)
互联网行业的小白,写博客的目的是为了记录自己的学习过程.对自己学习中所犯的错误做一个总结.由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教! PAT Basic Level P ...
- 1001 害死人不偿命的(3n+1)猜想 (15分) PAT (Basic Level) Practice (中文)C语言版
PAT (Basic Level) Practice (中文) 1001 害死人不偿命的(3n+1)猜想 (15分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一 ...
- PAT (Basic Level) Practice (中文)1095 解码PAT准考证 (25 分)
PAT (Basic Level) Practice (中文)1095 解码PAT准考证 (25 分) PAT 准考证号由 4 部分组成: 第 1 位是级别,即T代表顶级:A代表甲级:B代表乙级: 第 ...
- PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642
PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642 题目描述 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下 ...
- 1048 数字加密【PAT (Basic Level) Practice (中文)】
1048 数字加密[PAT (Basic Level) Practice (中文)] 原题链接:1048 数字加密 (pintia.cn) 1.前言 PAT(乙级)2015年冬季考试 第三题 分数: ...
- 可优化-PAT (Basic Level) Practice Python解法 1026 程序运行时间(时间进位/四舍五入Tobe解决)
可优化-PAT (Basic Level) Practice Python解法 1026 程序运行时间(时间进位/四舍五入Tobe解决) c1, c2 = map(int,input().split( ...
最新文章
- android短信发送乱码,解决CEMAPI发送中文短信时会乱码
- web developer tips (37):如何组织Using指令
- 【C++ Primer | 08】IO库
- 基于SIP协议的视频通讯
- Spring Boot中使用@Scheduled创建定时任务
- JAVA入门级教学之(对象的创建和使用)
- linux下进程调度模拟程序,linux认证辅导:linux进程调度模拟怎么做?
- wincc与第三方软件opc通讯_OPC 通讯不得不说的强大软件
- 带集成保护的共模滤波器(CMF)行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- Android开发实践:Java层与Jni层的数组传递
- JDBC连接池DBUtils
- ftp测试工具_Linux网络配置 | FTP 实战-本地用户登录
- Hibernate下载地址
- m451dn linux驱动下载,惠普m451dn驱动下载-惠普hp m451dn打印机驱动下载 v61.120.04官方版--pc6下载站...
- 深入理解java8,深入理解Java8新特性与源码剖析
- 迪文串口屏TTL与主控板RS232电平信号转换方案
- 46-动态编程语言(python)大作业-记忆翻牌游戏
- java实现excel合并的单元格自动换行自动调高
- Excel_文本转数值型
- 盘点气压传感器在智能手机中应用场景 智芯传感板装式压力传感器提升产品性能