PAT乙级(Basic Level)真题

1.A+B和C(15)

题目描述:

给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C。

总结:
1.Java 中 int 型长度[-2^31 , 2^31 - 1],此题中,范围到2^31,所以用Long代替。
2.不用编译器写代码好多都记不清应该怎么写了。
3.ArrayList后面是引用数据类型,只能用Integer 。Java 中 int 和 Integer 的区别

代码:

import java.util.*;

public class Main{
    static private ArrayList<Long> A = new ArrayList<>();
    static private ArrayList<Long> B = new ArrayList<>();
    static private ArrayList<Long> C = new ArrayList<>();
    static private int turn;

    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        turn = scan.nextInt();
        if(turn>10) System.exit(0);

        for(int i=0;i<turn;i++){
            Long t = scan.nextLong();
            if(t>Math.pow(2,31) || t<Math.pow(-2,31)) System.exit(0);
            A.add(t);
            t = scan.nextLong();
            B.add(t);
            t = scan.nextLong();
            C.add(t);
        }

        for(int i=0;i<turn;i++){
            System.out.println("Case #"+(i+1)+": "
                    + m.compare(A.get(i),B.get(i),C.get(i)));
        }
    }

    protected static boolean compare(Long a,Long b,Long c){
        return a + b > c;
    }
}
2.数字分类 (20)

题目描述:

给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:
A1 = 能被5整除的数字中所有偶数的和;
A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算 n1-n2+n3-n4…;
A3 = 被5除后余2的数字的个数;
A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
A5 = 被5除后余4的数字中最大数字。

总结:
1.注意题目要求是按行输出还是一行输出。不要形成习惯
2.Math.pow()返回值类型是double,进行运算时要强制类型转换,比较大小可以不用。
(int) Math.pow(-1,ex++)

代码:

import java.util.*;

public class Main{
    private static int n;
    private static ArrayList<Integer> numbers = new ArrayList<>();
    
    private static int a1 = 0;
    private static boolean s1 = false;
    private static int a2 = 0;
    private static boolean s2 = false;
    private static int a3 = 0;
    private static int a4 = 0;
    private static int count = 0;
    private static int a5 = -1;
    
    public static void main(String[] args){
       Scanner scan = new Scanner(System.in);
       n = scan.nextInt();
       for(int i=0;i<n;i++){
           Integer t = scan.nextInt();
           numbers.add(t);
       }
       fun();
    }

    public static void fun(){
        int ex = 0;
        for(int i=0;i<numbers.size();i++){
            Integer t = numbers.get(i);
            if(t%5==0 && t%2==0) {s1 = true; a1 += t;}
            if(t%5==1) {s2 = true; a2 = a2 + t * (int) Math.pow(-1,ex++);}
            if(t%5==2) a3++;
            if(t%5==3) {count++;a4 += t;}
            if(t%5==4) {if(t>a5) a5 = t;}
        }

        if(s1) System.out.print(a1 + " "); else System.out.print("N ");
        if(s2) System.out.print(a2 + " "); else System.out.print("N ");
        if(a3!=0) System.out.print(a3 + " "); else System.out.print("N ");
        if(a4!=0) System.out.print(String.format("%.1f", (float)a4/count) + " "); else System.out.print("N ");
        if(a5!=-1) System.out.print(a5); else System.out.print("N");
    }
}
3.数素数 (20)

题目描述:

令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。

总结:
1.输出的最后一行如果只到一半就结束了,最后一个不能有空格
2.最小的素数是2。

代码:

import java.util.*;

public class Main {
    private static boolean flag = false;
    private static int a;
    private static int b;

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        a = scan.nextInt();
        b = scan.nextInt();
        if (a > 10000 || b > 10000) System.exit(0);

        int i = 2;
        int count = 0;
        while (count != b) {
            flag = false;
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    flag = true;
                }
            }
            if (!flag) {
                count++;
                if(count>=a&&count<=b){
                    System.out.print(i);
                    if ((count-a+1) % 10 != 0 && count!=b) System.out.print(" ");
                    else if(count!=b) System.out.print("\n");
                }
            }
            i++;
        }
    }
}
4.福尔摩斯的约会 (20)

题目描述:

大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’E’,那是第5个英文字母,代表一天里的第14个钟头(于是一天的0点到23点由数字0到9、以及大写字母A到N表示);后面两字符串第1对相同的英文字母’s’出现在第4个位置(从0开始计数)上,代表第4分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。

总结:
1.String[] day = {"MON","TUE","WED","THU","FRI","SAT","SUN"};String 数组的初始化使用花括号
2.char charAt(int index); 可以获得字符串指定位置的字符。
3.char[] toCharArray(); 可以将字符串转换为字符类数组,值可以用==比较。
4.Math.min() 获得最小值。
5.第一个:大写英文字母;第二个:字符;第三个:英文字母。

代码:

import java.util.*;

public class Main{
    private static String[] day = {"MON","TUE","WED","THU","FRI","SAT","SUN"};

    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String s1 = scan.next();
        String s2 = scan.next();
        String s3 = scan.next();
        String s4 = scan.next();

        char c = s1.charAt(date(s1,s2));
        System.out.print(day[c-'A']+" ");

        String s5 = s1.substring(date(s1,s2)+1);
        String s6 = s2.substring(date(s1,s2)+1);

        c = s5.charAt(hour(s5,s6));
        if(c<'9') System.out.print("0"+(c-'0')+":");
        else System.out.print((10+c-'A') +":");

        if(minute(s3,s4)<10) System.out.print("0"+minute(s3,s4));
        else System.out.print(minute(s3,s4));

    }

    public static int date(String s1,String s2){
        char[] arr1 = s1.toCharArray();
        char[] arr2 = s2.toCharArray();

        int i;
        for(i = 0;i<Math.min(arr1.length,arr2.length);i++){
            if(arr1[i]==arr2[i] && arr1[i]>='A' && arr1[i]<='Z') break;
        }
        return i;
    }

    public static int hour(String s1,String s2){
        char[] arr1 = s1.toCharArray();
        char[] arr2 = s2.toCharArray();

        int i;
        for(i = 0;i<Math.min(arr1.length,arr2.length);i++){
            if(arr1[i]==arr2[i]) break;
        }
        return i;
    }

    public static int minute(String s1,String s2){
        char[] arr1 = s1.toCharArray();
        char[] arr2 = s2.toCharArray();

        int i;
        for(i = 0;i<Math.min(arr1.length,arr2.length);i++){
            if(arr1[i]==arr2[i] && arr1[i]>='A' && arr1[i]<='z') break;
        }
        return i;
    }
}
5.德才论 (25)

题目描述:

宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”
现给出一批考生的德才分数,请根据司马光的理论给出录取排名。

总结:
1.常用ASCII码要背过。
2.需要import的:import java.util.ArrayList;
3.由于main()方法是static,所以在main()函数里使用的所有变量、函数,全部要加static

为什么java的main方法必须是静态的
主要原因是为了让JVM调用这个方法时不需要创建实例

4.字符串长度length()是函数。
5.字符串变字符数组:char[] id_array = id.toCharArray();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值