日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PAT乙类1014 福尔摩斯的约会 (20 分)

發布時間:2024/7/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

二、代碼

測試點分析

  • 確當周幾的字母是A–G,所以遍歷字符串的時候,第一個和第二個字符串的相同位置字母不僅一樣,還要是A~G內的
  • 先確定小時,之后才會考慮小時和分鐘!!而且是在滿足1條件的字母的位置后面查找,前面根本不在乎!!即不執行!用flag來判斷(因為兩個字符串第一個相同的字符是8,但題目的陳述的是E,這是隱含信息)
  • 兩個字符串中相同位置具有相同字母的對數不止兩對,所以在確定小時之后一定要跳出循環,(0-9和A-N是相互矛盾的,誰先相同,用誰)不然后面還可能又有一對滿足2的,這就錯誤了,有一個測試點的陷阱就在這里。
  • 最后兩個字符串中只要是字母就行,不分大小寫在字符串的相對位置(從零開始計數)。
  • 小時或者分鐘不滿足兩位的要記得補零。
  • 新函數
  • switch的替換 -----string類型
    week字符串的使用感覺不錯哦!!可以不用switch了,get到新技能
  • string week[7] = {“MON”, “TUE”, “WED”, “THU”, “FRI”, “SAT”, “SUN”};

  • 輸出01、02、03…補零
  • 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; string week[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] == str[1][j]) {if(flag == 0) {if(str[0][j] >= 'A' && str[0][j] <= 'G') {cout<<week[str[0][j] - 'A']<<" ";flag = 1;}}else {if(str[0][j] >= 'A' && str[0][j] <= 'N') {hour = str[0][j] - 'A' + 10;break; //及時退出, 這兩個是矛盾的 }else if(str[0][j] >= '0' && str[0][j] <= '9') {hour = str[0][j] - '0';break; //及時退出,這兩個是矛盾的 }}}}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')) {if(str[2][j] == str[3][j]) {printf("%02d", j);break;}}} return 0; }

    下面的只是我第一次的表示方法,有點繞,自己就是記錄一下!!!!可以不看

    #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 分)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。