PAT乙类1014 福尔摩斯的约会 (20 分)
生活随笔
收集整理的這篇文章主要介紹了
PAT乙类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二、代碼
測試點分析
新函數
week字符串的使用感覺不錯哦!!可以不用switch了,get到新技能
string week[7] = {“MON”, “TUE”, “WED”, “THU”, “FRI”, “SAT”, “SUN”};
printf("%02d", j); //c語言,不建議用cout
str[0][j] >= ‘A’ && str[0][j] <= ‘G’
str[0][j] >= ‘0’ &&str[0][j] <= ‘9’
str[2][j] >= ‘a’ && str[2][j] <= ‘z’
flag的使用
它的使用,可以選擇性的執行代碼!!!如果多種執行塊時!!
輸出大寫字母的位置。比如E,是第5個。
‘E’ - ‘A’ + 1
分析
1) 這個題目確實看起來有點復雜,但是它整個的思維是:
同時遍歷兩個字符串相同位置
1.字符相等,而且字符必須是大寫字母,且必須在’A’ ~ ‘G’ 之間。(星期幾)
2.字符相等,而且字符必須在’A’ ~ ‘N’ 或 ‘0’ ~ '9’之間 (小時)
3.字符相等, 而且必須是字母。(分鐘)
下面的只是我第一次的表示方法,有點繞,自己就是記錄一下!!!!可以不看
#include <iostream> #include <string.h> #include <stdio.h> using namespace std;int main() {char str[4][61] = {" "}; //四個字符串。int i, j; char c1, c2, c3, c4; //用來保存臨時字符。 string wens[7] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};int flag = 0; //用來判斷星期是不是已經輸出!! int hour; //小時for(i=0; i<4; i++) {cin>>str[i];}for(j=0; j<61; j++) {if(str[0][j] >= 'A' && str[0][j] <= 'N') { //不是任意一個字母就行的!!必須是在范圍之內的 c3 = str[0][j];if(flag == 1 && c3 == str[1][j]) {hour = c3 - 'A' + 10;flag = 2;break;}}else if(str[0][j] >= '0' && str[0][j] <= '9') {c2 = str[0][j];if(str[1][j] == c2 && flag == 1) { //是第一個字母相同后面找再相同的!! hour = c2 - '0';break;}}if(str[0][j] >= 'A' && str[0][j] <= 'G') { //不是任意一個字母相同就行的 c1 = str[0][j];if(str[1][j] == c1){if(flag == 0) {cout<<wens[c1 - 'A']<<" ";flag = 1;}}}}printf("%02d:", hour); //hour也必須是02d形式!!!! for(j=0, i=0; j<61; j++) {if((str[2][j] >= 'a' && str[2][j] <= 'z') || (str[2][j] >= 'A' && str[2][j] <= 'Z')) {c4 = str[2][j]; //最后一個條件只要是相同的字母就行,不區分大小寫 if(c4 == str[3][j]) {printf("%02d", j);break;}}} return 0; }總結
以上是生活随笔為你收集整理的PAT乙类1014 福尔摩斯的约会 (20 分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3字节转化字符_捋一捋字符串
- 下一篇: ACL’22 | 为大模型定制的数据增强