待完善!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乙级 文章被收录于专栏
做题记录