浙大PAT 乙级(题号1041~1045)自解全AC Java | C++实现

其他题解收录都在这了👇👇👇

PAT 乙级(Basic Level) Practice 题解合集(全AC版)


目录

1041、考试座位号(分数 15)

1042、字符统计(分数 20)

1043、输出PATest(分数 20)

1044、火星数字(分数 20)

1045、快速排序(分数 25)


1041、考试座位号(分数 15)

题目描述:

代码实现:

import java.util.*;

class Node{
    String id;
    int kaoshi;
    public Node(String id, int kaoshi){
        this.id = id;
        this.kaoshi = kaoshi;
    }
}

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        Node[] students = new Node[N + 1];
        while(N -- != 0){
            String id = in.next();
            int jishi = Integer.parseInt(in.next());
            int kaoshi = Integer.parseInt(in.next());
            students[jishi] = new Node(id, kaoshi);
        }
        int M = Integer.parseInt(in.next());
        while(M -- != 0){
            int q = Integer.parseInt(in.next());
            System.out.println(students[q].id + " " + students[q].kaoshi);
        }
    }
}

运行结果:


1042、字符统计(分数 20)

题目描述:

代码实现:

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        int[] dict = new int[27];
        for(char c : s.toCharArray()){
            if(c >= 'a' && c <= 'z'){
                dict[(c - 'a')] ++;
            }
            else if(c >= 'A' && c <= 'Z'){
                dict[(c - 'A')] ++;
            }
        }
        int maxx = 0;
        for(int i = 1;i < 26;i ++){
            if(dict[i] > dict[maxx])
                maxx = i;
        }
        System.out.println((char)('a' + maxx) + " " + dict[maxx]);
    }
}

运行结果:


1043、输出PATest(分数 20)

题目描述:

代码实现:

import java.util.*;

public class Main{
    
    public static void printchar(int i){
        switch(i){
            case 0:
                System.out.print("P");
                break;
            case 1:
                System.out.print("A");
                break;
            case 2:
                System.out.print("T");
                break;
            case 3:
                System.out.print("e");
                break;
            case 4:
                System.out.print("s");
                break;
            case 5:
                System.out.print("t");
                break;
        }
    }
    
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        in.close();
        int[] info = new int[6];
        for(int i = 0;i < s.length();i ++){
            if(s.charAt(i) == 'P')
                info[0] ++;
            else if(s.charAt(i) == 'A')
                info[1] ++;
            else if(s.charAt(i) == 'T')
                info[2] ++;
            else if(s.charAt(i) == 'e')
                info[3] ++;
            else if(s.charAt(i) == 's')
                info[4] ++;
            else if(s.charAt(i) == 't')
                info[5] ++;
        }
        int mx = info[0];
        for(int i = 1;i < 6;i ++){
            mx = Math.max(mx, info[i]);
        }
        
        for(int i = 0;i < mx;i ++){
            for(int j = 0;j < 6;j ++){
                if(info[j] != 0){
                    printchar(j);
                    info[j] --;
                }
            }
        }
        System.out.println();
    }
}

运行结果:


1044、火星数字(分数 20)

题目描述:

代码实现:

import java.util.*;

public class Main{

    public static String[] dict = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
    public static String[] high = {"", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};

    public static int findDict(String f){
        for(int i = 0;i < 13;i ++)
            if(f.equals(dict[i]))
                return i;
        return -1;
    }

    public static int findHigh(String f){
        for(int i = 1;i < 13;i ++)
            if(f.equals(high[i]))
                return i;
        return -1;
    }

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int N = Integer.parseInt(in.nextLine());
        while(N -- != 0){
            String s = in.nextLine();
            if(s.matches("[0-9]+")){
                int num = Integer.parseInt(s);
                if(num == 0)
                    System.out.println("tret");
                else if (num >= 1 && num <= 12)
                    System.out.println(dict[num]);
                else {
                    int h = num / 13;
                    if (num % 13 == 0)
                        System.out.println(high[h]);
                    else
                        System.out.println(high[h] + " " + dict[num % 13]);
                }
            }

            else{
                String[] info = s.split(" ");
                int ans = 0;
                if(findHigh(info[0]) != -1){
                    ans += 13 * findHigh(info[0]);
                    if(info.length == 2)
                        ans += findDict(info[1]);
                }
                else
                    ans += findDict(info[0]);
                
                System.out.println(ans);
            }
        }
    }
}

运行结果:


1045、快速排序(分数 25)

题目描述:

代码实现:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
/**
 * 主元的两个特点:1.位置排序前后无变化 2.max{左边序列} < pivot && pivot < min{右边序列}
 * 这里只需要比较排序前后的俩数组各元素位置变化 且 慢足2.中条件的左边序列要求即可
 * 这题用Java内存会爆掉,果断换C++
 */
int N;

int main(){
    cin >> N;
    vector<int> v1(N), v2(N), MainVec;
    for(int i = 0;i < N;i ++){
        cin >> v1[i];
        v2[i] = v1[i];
    }
    sort(v2.begin(), v2.end());
    int maxx = -1;
    for(int i = 0;i < N;i ++){
        if(v1[i] == v2[i] && v1[i] > maxx)
            MainVec.push_back(v1[i]);
        maxx = max(maxx, v1[i]);
    }
    cout << MainVec.size() << endl;
    for(int i = 0;i < MainVec.size();i ++){
        if(i == MainVec.size() - 1)
            cout << MainVec[i];
        else
            cout << MainVec[i] << " ";
    }
    cout << endl;
    return 0;
}

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值