PAT乙级(Basic Level)真题,福尔摩斯的约会

Posted blackjt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级(Basic Level)真题,福尔摩斯的约会相关的知识,希望对你有一定的参考价值。

题目描述

大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 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.第一二个字符比较:判断第一个字母是否相同
2.第一二个字符比较:判断第二个字符是否相同,这个是在第一个大写字母相同的基础上,向后查找有没有相同字符,取得的字符如果是数字,那么直接将其输出,如果是字母,则要减去相应的ASCII值
3.第三四个字符比较,判断第一对相同的英文字母,取其下标
代码:
  1 import java.util.Scanner;
  2 
  3 public class Main{
  4 
  5     public static void main(String[] args) {
  6         Scanner sc=new     Scanner(System.in);
  7         String []arr=new String[4]; 
  8         char day = 0;
  9         int dayShu=0;
 10         char hour = 0;
 11         int hourShu=0;
 12         int fen = 0;
 13         for(int i=0;i<4;i++) {
 14             String str=sc.nextLine();
 15             if(str.length()<=60&&str.length()>0) {
 16                 /*将4个字符串存入一个数组中*/
 17                 arr[i]=str;
 18             }else {
 19                 break;
 20             }
 21         }
 22         /*
 23          * 1.比较第一个和第二个字符串,判断第一个大写字母
 24          * 2.比较第一个和第二个字符串,判断第二个大写字母
 25          * 3.比较第三个和第四个字符串,判断第一个英文字母(不判断大小写)
 26          * 4.输出的规范为THU 14:04,如果分小于十,那么要补0
 27          */
 28         int count=0;
 29         //1,2
 30         for(int i=0;i<arr[0].length();i++) {
 31             for(int j=0;j<arr[1].length();j++) {
 32                 //判断是否为大写字母
 33                 //Character.isLowerCase(char c)判断字母小写,
 34                 //Character.isUpperCase(char c)判断字母大写,
 35                 if(Character.isUpperCase(arr[0].charAt(i))&&Character.isUpperCase(arr[1].charAt(j))) {
 36                     //如果count==0,那么是第一次判断
 37                     //如果count==1,那么是第二次判断
 38                     //如果count==2,那么是第三次判断
 39                     if(count==0) {
 40                         if(arr[0].charAt(i)==arr[1].charAt(j)) {
 41                             count++;
 42                             day=arr[1].charAt(j);
 43                             dayShu=j;
 44                             break;
 45                         }
 46 
 47                     } 
 48                 }else {
 49                     continue;
 50                 }
 51             }
 52         }
 53         //2.
 54         for(int i=dayShu+1;i<arr[0].length();i++) {
 55                 if((arr[0].charAt(i))==(arr[1].charAt(i))) {
 56                     hour=arr[1].charAt(i);
 57                 
 58                     break;
 59                 }
 60         }
 61         //3.
 62         for(int i=0;i<arr[2].length();i++) {
 63             if(Character.isLetter(arr[2].charAt(i))&&Character.isLetter(arr[3].charAt(i))) {
 64                 if((arr[2].charAt(i))==(arr[3].charAt(i))) {
 65                     fen=i;
 66                     break;
 67                 }
 68                 else {
 69                     continue;
 70                 }
 71             }
 72 
 73         }
 74 
 75         //4
 76         switch(day) {
 77         case 65:
 78             System.out.print("MON"+" ");
 79             break;
 80         case 66:
 81             System.out.print("TUE"+" ");
 82             break;
 83         case 67:
 84             System.out.print("WED"+" ");
 85             break;
 86         case 68:
 87             System.out.print("THU"+" ");
 88             break;
 89         case 69:
 90             System.out.print("FRI"+" ");
 91             break;
 92         case 70:
 93             System.out.print("SAT"+" ");
 94             break;
 95         case 71:
 96             System.out.print("SUN"+" ");
 97             break;
 98         default:
 99             break;
100         }
101 
102         if(47<hour&&hour<58) {
103             System.out.print("0"+hour+":");
104         }else if(64<hour&&hour<79){
105             System.out.print(hour-55+":");
106         }
107 
108         if(fen<10) {
109             System.out.println("0"+fen);
110         }else {
111             System.out.println(fen);
112         }
113     }
114 }

如果有简单的方法,可以在下面评论,互相进步,感谢批评指正!

以上是关于PAT乙级(Basic Level)真题,福尔摩斯的约会的主要内容,如果未能解决你的问题,请参考以下文章

PAT 乙级真题 1004.福尔摩斯的约会

JAVA1004 成绩排名 (20分) PAT乙级 PAT (Basic Level) Practice(中文)

JAVA1003 我要通过!(20分) PAT乙级 PAT (Basic Level)Practice (中文)

JAVA1003 我要通过!(20分) PAT乙级 PAT (Basic Level)Practice (中文)

PAT乙级(Basic Level)练习题-NowCoder数列总结

JAVA1005 继续(3n+1)猜想 (25分) PAT乙级 PAT (Basic Level)Practice (中文)