pat乙级-1004-1005(java)

=========1004==========
public static void main(String[] args) throws IOException {
    StringTokenizer st = new StringTokenizer(next());
    int i = Integer.parseInt(st.nextToken());
    student[] arr = new student[101];
    while (i-- > 0) {
        st = new StringTokenizer(next());
        student stu = new student(st.nextToken(), st.nextToken(), Integer.parseInt(st.nextToken()));
        //根据成绩为下标存入数组
        arr[stu.getGrade()] = stu;
    }
    //过滤空值,下标最小为最小值,下标最大为最大值
    Object[] array = Arrays.stream(arr).filter(ele -> ele != null).toArray();
    System.out.print(array[array.length - 1] + "\n" + array[0]);
}

=========1005==========

package com.sort.test.pat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

/**
 * @Author: Yang_f
 * @CreateTime: 2024-08-05
 * @Description: 继续(3n + 1)猜想 我们称一个数列中的某个数 n 为“关键数”,
 * 如果 n 不能被数列中的其他数字所覆盖。
 */

public class b_1005 {
    static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    static String next() throws IOException {
        return in.readLine();
    }
    public static void main(String[] args) throws IOException {
        StringTokenizer st = new StringTokenizer(next());
        int n = Integer.parseInt(st.nextToken());
        //存值
        Map<Integer, Boolean> map = new HashMap<>();
        st = new StringTokenizer(next());
        //标记false,表示未访问
        for (int i = 0; i < n; i++) map.put(Integer.valueOf(st.nextToken()), false);
        //循环判断那些被访问
        for (Map.Entry<Integer, Boolean> m : map.entrySet()) {
//            System.out.println(m.getKey() + " " + m.getValue());
            if(!m.getValue()){//没有访问的进循环
//                System.out.println(m.getKey() + "进入---");
                int temp = m.getKey();
                while(temp > 1){
                    if(temp % 2 == 0){//偶数
                        temp >>= 1;
                        if(map.containsKey(temp) && !map.get(temp)){ //未访问
                            //把当前找到的数标记 已访问
//                            System.out.println("已访问:" + temp);
                            map.put(temp, true);
                        }
                    }else {//奇数
                        temp = (temp * 3 + 1) >> 1;
                        if(map.containsKey(temp) && !map.get(temp)){ //未访问
                            //把当前找到的数标记 已访问
//                            System.out.println("已访问:" + temp);
                            map.put(temp, true);
                        }
                    }
                }
            }
        }

        //获取未访问的值
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<Integer, Boolean> mm : map.entrySet())
            if (!mm.getValue()) sb.append(mm.getKey() + " ");
        //分割字符串
        String[] s = sb.toString().split(" ");
        Integer[] arr = new Integer[s.length];
        //分割后进行降序排序
        for (int i = 0; i < s.length; i++)
            arr[i] = Integer.parseInt(s[i]);
        Arrays.sort(arr, Collections.reverseOrder());
        //去除末尾空格
        StringBuilder sb2 = new StringBuilder();
        for (Integer i : arr) sb2.append(i + " ");
        System.out.println(sb2.toString().stripTrailing());
    }
}
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值