待完善!1005 继续(3n+1)猜想 (25 分)
思路:看题目的样例,
| n | 3n+1 |
| 3 |
5、8、4、2、1 |
| 5 |
8、4、2、1 |
| 6 | 3、5、8、4、2、1 |
| 7 | 11、17、26、13、20、10、5、8、4、2、1 |
| 8 | 4、2、1 |
| 11 | 17、26、13、20、10、5、8、4、2、1 |
也就是说找出左边一栏中 没有在右边一栏中出现的 数,即为关键字。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] num = new int[n];
for(int i=0; i<n; i++){
num[i] = sc.nextInt();
}
HashMap<Integer, Boolean> hashmap = new HashMap<Integer, Boolean>();
for (int i = 0; i < 100; i++) {
hashmap.put(i, false);// 数字键对应的值为false表示没被覆盖,true表示被覆盖
}
for (int i = 0; i < n; i++) {
int m = num[i];
// 先做3n+1的猜想
while (m != 1) {
if (m % 2 == 0) {
m = m / 2;
} else {
m = (3 * m + 1) / 2;
}
hashmap.put(m, true);// 该数字被覆盖
}
}
Arrays.sort(num);
StringBuilder sb = new StringBuilder();
for (int i = n-1; i >=0; i--) {
if (hashmap.get(num[i]) == false) {
// 说明没有被覆盖
sb.append(num[i] + " ");
}
}
String res = sb.toString();
System.out.print(res.trim());
}
}
没有全对
PAT乙级 文章被收录于专栏
做题记录
查看11道真题和解析


