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表示星期日。题目输入保证每个测试存在唯一解。

输入例子:

3485djDkxh4hhGE2984akDfkkkkggEdsbs&hgsfdkd&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 }

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

原文地址:https://www.cnblogs.com/BLACKJT/p/12195939.html

时间: 2024-07-29 11:10:11

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

PAT乙级(Basic Level)真题训练

写在前面:PAT冬季赛马上就要开始了!??这一次先报一个乙级冲鸭!我感Jio乙级里面还是有蛮多水题的,也有些题虽然看上去是水题,但是真正用代码实现起来的话会卡你那么一下,比如第5题数素数真的神打脸. 天上不会掉馅饼的,好好学习,努力奋斗才能梦想成真. 1. D进制的A + B(20) 题目描述: 输入两个非负10进制整数A和B(<= 230-1),输出A + B的D(1 <D <= 10)进制数. 输入描述: 输入在一行中依次给出3个整数A,B和D. 输出描述: 输出A + B的D进制数

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

题目描述 NowCoder最近在研究一个数列: F(0) = 7 F(1) = 11 F(n) = F(n-1) + F(n-2) (n≥2) 他称之为NowCoder数列.请你帮忙确认一下数列中第n个数是否是3的倍数. 输入描述: 输入包含多组数据. 每组数据包含一个整数n,(0≤n≤1000000). 输出描述 对应每一组输入有一行输出. 如果F(n)是3的倍数,则输出"Yes":否则输出"No". --- 输入例子: 0 1 2 3 4 5 输出例子: No

PAT(Basic Level)practice1003

我要通过 “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: 1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符:2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串:3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符

PAT(Basic Level)practice1001

写在前面的话:其实自己学习计算机已经接近五年了,从本科一直到了研究生,然而只能说自己浪费了大把的时光,对c语言也是最近才开始真正的上手学习,可想而知大学四年都是如何水过来的,现在想起来,内心其实是后悔的,后悔自己浪费了时间,后悔自己没能珍惜那么好的资源.也担心,担心自己没办法弥补.但是是谁说过的来着,学习一件事情,最好的时间是十年前,其次现在.既然我有了改变自己的勇气,就希望自己可以勇敢走下去.从PAT最基础的开始练习,因为是新手,写的代码可能很丑,希望有一天当自己回头看,可以看到自己的努力与进

PAT甲级第二次真题练习

1005 Spell It Right (20)(20 分)提问 Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English. Input Specification: Each input file contains one test case. Each case occupies one

PAT(Basic Level)practice1002

写出这个数 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格. 输入样例: 1234567890987654321123456789 输出样例: yi san wu 这道题首先要明白n的范围已经超过了普通的类型,所以肯定要利用字符数组来进行处理.其次在求得和之后,输出有两种方法,如果是

PAT(Basic Level)practice1004

读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生的姓名 学号 成绩 ... ... ... 第n+1行:第n个学生的姓名 学号 成绩 其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的. 输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低

乙级(Basic Level) 1006

题目描述 正整数A的"DA(为1位整数)部分"定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA = 6,则A的"6部分"PA是66,因为A中有2个6. 现给定A.DA.B.DB,请编写程序计算PA + PB. 输入描述: 输入在一行中依次给出A.DA.B.DB,中间以空格分隔,其中0 < A, B < 1010. 输出描述: 在一行中输出PA + PB的值. 输入例子: 3862767 6 13530293 3 输出例子: 3

乙级(Basic Level) 1007

题目描述 本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入描述: 输入在1行中依次给出A和B,中间以1空格分隔. 输出描述: 在1行中依次输出Q和R,中间以1空格分隔. 输入例子: 123456789050987654321 7 输出例子: 17636684150141093474 3 解法: Python:a = input().split() a = [int(i) for i in a] print(