Pat刷题真题乙级(2)

前言

今天突破15分开始写20分的题,超开心!

Pat1026(跟奥巴马一起编程)

题目链接
题目描述:

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!

输入描述:

输入在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格。

输出描述:

输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%
(四舍五入取整)。

输入例子:

10 a

输出例子:

aaaaaaaaaa
a a
a a
a a
aaaaaaaaaa

分析:
要求行数四舍五入取整,则竖行为N,横行数为(N+1)/2表示。

ac代码为:

import java.util.Scanner;
public class Niuk1026 {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        String c = scan.next();
        for(int i=1;i<=(N+1)/2;i++){
    
    
            for(int j =1;j<=N;j++){
    
    
                if(i==1||i==(N+1)/2||j==1||j==N){
    
    
                    System.out.print(c);
                }else System.out.print(" ");
            }
            System.out.println();
        }
    }
}

Pat1002(数字分类)

题目链接
题目描述:

给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:

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

输入描述:

每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。

输出描述:

对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出“N”。

输入例子:

13 1 2 3 4 5 6 7 8 9 10 20 16 18

输出例子:

30 11 2 9.7 9

分析:
这题主要要理解题意,思路要清晰。先求出A1,A2,A3,A4,A5,然后依次输出。

ac代码为:

import java.util.Scanner;
public class Niuk1002 {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int[] N = new int[n];
        int a = 0,e = 0, o = 0,j=0,max=0;
        double u=0,k=0;
        for(int i = 0;i<n;i++){
    
    
            N[i] = scan.nextInt();
            if(N[i]%10==0){
    
    
                a += N[i];
            }else if(N[i]%5==1){
    
    
                j++;
                if(j%2==1) {
    
    
                    e += N[i];
                }else e+=-N[i];
            }else if(N[i]%5==2){
    
    
                o++;
            }else if(N[i]%5==3){
    
    
                u += N[i];
                k++;
            }else if(N[i]%5==4){
    
    
                if(N[i]>max){
    
    
                    max = N[i];
                }
            }
        }
        if(a>0){
    
    
            System.out.print(a+" ");
        }else System.out.print("N" + " ");
        if(j>0){
    
    
            System.out.print(e+" ");
        }else System.out.print("N" + " ");
        if(o>0){
    
    
            System.out.print(o+" ");
        }else System.out.print("N" + " ");
        if(u/k>0){
    
    
            System.out.print(String.format("%.1f",u/k)+" ");
        }else System.out.print("N" + " ");
        if(max>0){
    
    
            System.out.print(max);
        }else System.out.print("N");
    }
}

Pat1003(数素数)

题目链接
题目描述:

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

输入描述:

输入在一行中给出M和N,其间以空格分隔。

输出描述:

输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

输入例子:

5 27

输出例子:

11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103

分析:
因没有给出素数范围值,又M <= N <= 10000,所以素数取值范围很大,在求素数时要先遍历是否为素数,可用j除以,j的范围不应该取得太大,则采用折中的方法来取,根号J小于等于素数时,给运算带来了方便。

ac代码为:

import java.util.Scanner;
public class Niuk1003 {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        int M = scan.nextInt();
        int N = scan.nextInt();
        int[] zhishu = new int[N];
        int r = 0;
        for (int i = 2; i <= 104731; i++) {
    
    
            boolean flag = true;
            for (int j = 2; j*j< i+1; j++) {
    
    
                if (i % j == 0) {
    
    
                    flag = false;
                    break;
                }
            }
            if (flag) {
    
    
                zhishu[r++] = i;//把质数存进数组中
            }
            if (r == N) {
    
    
                break;
            }
       }
        int index=0;//index%10==0 syssp
        for (r = M-1; r < N; r++) {
    
    
            index++;
            if (index % 10 == 0) {
    
    
                System.out.println(zhishu[r]);
            }
            else {
    
    
                if(r == N-1){
    
    
                    System.out.print(zhishu[r]);
                }else {
    
    
                    System.out.print(zhishu[r] + " ");
                }
            }
        }

            }
        }

Pat1004(福尔摩斯的约会)

题目链接
题目描述:

大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 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分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。

输入描述:

输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串。

输出描述:

在一行中输出约会的时间,格式为“DAY HH:MM”,其中“DAY”是某星期的3字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期
四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解。

输入例子:

3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm

输出例子:

THU 14:04

分析:
要先比较前两个字符串,第1对相同的大写英文字母是什么,符合条件的大写字母再进行switch()判断,定义一个index,使第一个if语句只能执行一次,使第二个if语句执行一次,得到第一组,第二组字母就进行第3,4个字符串的比较。对于时间的输出,我定义了一个接口,进行判断是否加上字符串0.

ac代码为:

import java.util.Scanner;
public class Niuk1004 {
    
    
    public static String getnum(int a){
    
    
        if(a>=10)return a+"";
        return "0"+a;
    }
    public static void main(String[] args) {
    
    
        char[] k = {
    
    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N'};
        Scanner scan = new Scanner(System.in);
        String A1 = scan.nextLine();
        String A2 = scan.nextLine();
        String A3 = scan.nextLine();
        String A4 = scan.nextLine();
        String str= "";
        int f=0,index=0;
         int minlen=Math.min(A1.length(),A2.length());
        for(int i = 0;i<minlen;i++) {
    
    
            char B1 = A1.charAt(i);
            char B2 = A2.charAt(i);
            if(B1==B2&&B1>='A'&&B1<='G'&&index==0){
    
    
                index++;
               switch (B1){
    
    
                   case 'A': str="MON";break;
                   case 'B': str="TUE";break;
                   case 'C': str="WED";break;
                   case 'D': str="THU";break;
                   case 'E': str="FRI";break;
                   case 'F': str="SAT";break;
                   case 'G': str="SUN";break;

               }
               continue;
            }
            if(B1==B2&&((B1>='0'&&B1<='9')||(B1>='A'&&B1<='N'))&&index==1){
    
    
                for(int j=0;j<k.length;j++){
    
    
                    if(B1==k[j]){
    
    
                        index++;
                        f = j;
                        break;

                    }
                }
            }
        }
        int minle=Math.min(A3.length(),A4.length());
        int m =0;
        for(int i=0;i<minle;i++){
    
    
            char B3 = A3.charAt(i);
            char B4 = A4.charAt(i);
            if(B3==B4&&((B3>='a'&&B3<='z')||(B3>='A'&&B3<='Z'))) {
    
    
                m=i;
                break;
            }
        }
        String st =getnum(m);
        String st1 = getnum(f);
        System.out.print(str+" "+st1+":"+st);
    }


}

猜你喜欢

转载自blog.csdn.net/qq_41638508/article/details/105421511