PAT(B) 1005 继续(3n+1)猜想(Java)
题目链接:1005 继续(3n+1)猜想
分析
找出所有的被“覆盖”的数,然后再将输入的数中不在被“覆盖”的数中的数添加到“关健数”中。输出前先转成数组并升序排序,降序输出即可。
代码
/**
 * Score 25
 * Run Time 151ms
 * @author wowpH
 * @version 1.1
 */
import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
	public int k; 		// 待验证的数的个数
	public int[] num; 	// 待验证的数
	private List<Integer> ans; 		// 关键数
	private List<Integer> cover;	// 被“覆盖”的数
	public Main() {
		ans = new ArrayList<Integer>();
		cover = new ArrayList<Integer>();
		input(); 	// 输入
		setCover();	// 计算被“覆盖”的数
		setAns(); 	// 计算关健数
		output(); 	// 输出
	}
	private void input() {
		Scanner sc = new Scanner(new BufferedInputStream(System.in));
		k = sc.nextInt();
		num = new int[k];
		for (int i = 0; i < k; i++) {
			num[i] = sc.nextInt();
		}
		sc.close();
	}
	private void setCover() {
		for (int i : num) {
			while (i > 1) {
				if (0 == (i & 1)) {
					i /= 2;
				} else {
					i = (i * 3 + 1) / 2;
				}
				if (cover.contains(i)) { // i已经被“覆盖”
					break;
				}
				cover.add(i); 	// 若未覆盖,添加到被“覆盖”的数中
			}
		}
	}
	private void setAns() {
		for (int i : num) {
			if (!cover.contains(i)) {	// 输入的数,若未被覆盖
				ans.add(i); 			// 则添加到关键数中
			}
		}
	}
	private void output() {
		Object[] arr = ans.toArray();
		Arrays.sort(arr); 	// 升序排序
		for (int i = arr.length - 1; i > 0; i--) {	// 降序输出
			System.out.print(arr[i] + " ");
		}
		if (arr.length > 0) {
			System.out.println(arr[0]); 	// 最后一个数,换行
		}
	}
	public static void main(String[] args) {
		new Main();
	}
}
PAT(B) 1005 继续(3n+1)猜想(Java)的更多相关文章
- PAT 乙级 1005.继续(3n+1)猜想 C++/Java
		1005 继续(3n+1)猜想 (25 分) 题目来源 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记 ... 
- PAT 乙级 1005. 继续(3n+1)猜想 (25)
		1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情 ... 
- PAT乙级   1005. 继续(3n+1)猜想 (25)
		1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz ... 
- [C++]PAT乙级1005. 继续(3n+1)猜想 (25/25)
		/* 1005. 继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推 ... 
- PAT 乙级 1005 继续(3n+1)猜想 (25) C++版
		1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz ... 
- 【PAT】1005. 继续(3n+1)猜想 (25)
		1005. 继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中 ... 
- PAT 乙级 -- 1005 -- 继续(3n+1)猜想
		题目简述 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如 ... 
- PAT Basic 1005 继续(3n+1)猜想 (25 分)
		卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 进行验证的时 ... 
- 1005 继续(3n+1)猜想 (25 分)
		1005 继续(3n+1)猜想 (25)(25 分) - 过期汽水的博客 - CSDN博客https://blog.csdn.net/qq_40167974/article/details/80739 ... 
随机推荐
- CentOS7 升级Python2.x到3.x
			CentOS 7 中默认安装了 Python,版本比较低(2.7.5),为了使用新版 3.x,需要对旧版本进行升级.由于很多基本的命令.软件包都依赖旧版本,比如:yum.所以,在更新 Python 时 ... 
- 个人学习分布式专题(二)分布式服务治理之分布式协调技术Zookeeper
			分布式协调技术Zookeeper 2.1 zookeeper集群安装部署(略) 2.2 zookeeper的基本原理,数据模型 2.3 zookeeper Java api的使用 2.4 zookee ... 
- vue 脚手架安装
			首先安装node.js npm 配置全局安装路径和缓存 node 安装路径下新建两个目录,node_cache和node_global npm config set prefix "E:\n ... 
- 咏南中间件新增MORMOT插件功能
			咏南中间件新增MORMOT插件功能 咏南中间件支持DATASNAP和MORMOT两种通讯框架. 原来已经支持DATASNAP插件,现在又增加了MORMOT插件,已经支持DATASNAP和MORMOT两 ... 
- wmi 远程访问问题解决
			WMI远程访问问题解决方法 WMI 全称为:Microsoft Windows Management Instrumentation (WMI) 按微软的介绍大致如下: WMI 是 Mic ... 
- 续--Flask, Django - 区别
			1. 目录结构 参考:https://blog.csdn.net/yang9520/article/details/79740374 中文文档(http://docs.jinkan.o ... 
- python分布式进程(windows下)
			分布式进程: 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上. Py ... 
- Windows 操作系统 端口转发
			在Windows 下可以使用netsh interface portproxy 命令实现端口转发功能. 例:netsh interface portproxy add v4tov4 listenpor ... 
- Scala 踩坑系列
			scala List scala list 如果使用 list(i)的形式进行遍历,如果list数据太多,每次遍历耗时会很久. 因为有一个 head tail 的概念 . 和java的List根据角标 ... 
- python中pop(),popitem()的整理
			在python中,列表,字典,有序字典的删除操作有些凌乱,所以决定记录下,以便以后用乱了. 列表: 列表删除有三种方式: l.pop() l.remove() del l[3:8] 已下面的code为 ... 
