【PTA刷题整理】PAT 乙级 1014 福尔摩斯的约会

2020.03.01呀,原来昨天是四年一次的闰年的二月二十九哈哈哈,后知后觉妈呀不知不觉2020都过了那么多了,明天就要正式开始网上教学了,奥利给!


1014 福尔摩斯的约会 (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 分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。
输入格式:

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

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

3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm

输出样例:

THU 14:04


这个题看上去一大堆,第一眼眼都花了
实际上就是输入四个字符串,第一个字符串和第二个字符串里面第一对相同且在范围A-G内的大写字母代表星期几(因为一周就七天嘛,所以这里就七个字母,可以用一个字符串数组存放周一到周日七个字符串)
第一个字符串和第二个字符串相同,且满足0-9或A-N的字符代表第0至23钟头
最后两个字符串,首对相同英文字符的下标是分钟
值得注意的是
1.第一对是相同的大写字母A-G
2.第二对是相同的数字0-9和A-N
3.小时和分钟输出宽度为2,不足2位用零填充
,可以用printf的格式化输出,cout的会慢很多而且麻烦
4.在判断第二对字符时得到结果后就要break,不然会出现第二第三组测试点答案错误的情况


#include<iostream>                  //输入输出流头文件
#include<stdio.h>                   //标准输入输出
#include<stdlib.h>
#include<math.h>                    //数学函数
#include<string.h>                  //C语言字符数组的字符串
#include<algorithm>                 //C++标准模板库的函数
#include<map>                       //map映射容器
#include<unordered_map>             //无序的map映射容器
#include<vector>                    //变长数组容器
#include<queue>                     //队列
#include<stack>                     //栈
#include<string>                    //C++string类
#include<set>                       //set集合
using namespace std;                //标准命名空间

                                    //可以加入全局变量或者其他函数

int main(){                         //主函数
#ifdef ONLINE_JUDGE                 //如果有oj系统(在线判定),则忽略文件读入,否则使用文件作为标准输入
#else
    freopen("1.txt", "r", stdin);   //从1.txt输入数据
#endif
	string a , b , c , d;
	cin >> a >> b >> c >> d;
	string day[7] = {"MON" , "TUE" , "WED" , "THU",
					 "FRI" , "SAT" , "SUN"};
	int i = 0;
	for(i = 0;i < a.size() && i < b.size() ; i++){
		if(a[i] == b[i] && a[i] >= 'A' && a[i] <= 'G'){
			cout << day[a[i] - 'A'] << " ";
			break;
		}
	} 
	for(int j = i + 1;j < a.size() && j < b.size();j++){
		if(a[j] == b[j]){
			if(a[j] >= '0' && a[j] <= '9'){
				printf("%02d:",a[j] - '0');break;
			}else if(a[j] >= 'A' && a[j] <= 'N'){
				printf("%02d:",a[j] - 'A' + 10);break;
			}		
		}	
	}
	for(int k = 0;k < c.size() && k < d.size() ; k++){
		if(c[k] == d[k] && ((c[k] >= 'a' && c[k] <= 'z') || (c[k] >= 'A' && c[k] <='Z'))){
			printf("%02d\n",k);
			break;
		}
	}
    return 0;                       
}

发布了13 篇原创文章 · 获赞 1 · 访问量 262

猜你喜欢

转载自blog.csdn.net/weixin_43849089/article/details/104593375
今日推荐