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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/7/5 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT乙类1014 福尔摩斯的约会 (20 分) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、題目

大偵探福爾摩斯接到一張奇怪的字條:我們約會(huì)吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大偵探很快就明白了, 字條上奇怪的亂碼實(shí)際上就是約會(huì)的時(shí)間星期四 14:04,因?yàn)榍懊鎯勺址械?1 對(duì)相同的大寫(xiě)英文字母(大小寫(xiě)有區(qū)分)是第 4 個(gè)字母 D, 代表星期四;第 2 對(duì)相同的字符是 E ,那是第 5 個(gè)英文字母,代表一天里的第 14 個(gè)鐘頭(于是一天的 0 點(diǎn)到 23 點(diǎn)由數(shù)字 0 到 9、以 及大寫(xiě)字母 A 到 N 表示);后面兩字符串第 1 對(duì)相同的英文字母 s 出現(xiàn)在第 4 個(gè)位置(從 0 開(kāi)始計(jì)數(shù))上,代表第 4 分鐘。現(xiàn)給定兩對(duì) 字符串,請(qǐng)幫助福爾摩斯解碼得到約會(huì)的時(shí)間。輸入格式: 輸入在 4 行中分別給出 4 個(gè)非空、不包含空格、且長(zhǎng)度不超過(guò) 60 的字符串。輸出格式: 在一行中輸出約會(huì)的時(shí)間,格式為 DAY HH:MM,其中 DAY 是某星期的 3 字符縮寫(xiě),即 MON 表示星期一,TUE 表示星期二,WED 表示星期三, THU 表示星期四,FRI 表示星期五,SAT 表示星期六,SUN 表示星期日。題目輸入保證每個(gè)測(cè)試存在唯一解。輸入樣例: 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm 輸出樣例: THU 14:04

二、代碼

測(cè)試點(diǎn)分析

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

  • 輸出01、02、03…補(bǔ)零
  • printf("%02d", j); //c語(yǔ)言,不建議用cout

  • 判斷大寫(xiě)字母、小寫(xiě)字母、數(shù)字的方法
  • str[0][j] >= ‘A’ && str[0][j] <= ‘G’
    str[0][j] >= ‘0’ &&str[0][j] <= ‘9’
    str[2][j] >= ‘a(chǎn)’ && str[2][j] <= ‘z’

  • flag的使用
    它的使用,可以選擇性的執(zhí)行代碼!!!如果多種執(zhí)行塊時(shí)!!

  • 輸出大寫(xiě)字母的位置。比如E,是第5個(gè)。

  • ‘E’ - ‘A’ + 1

    分析

    1) 這個(gè)題目確實(shí)看起來(lái)有點(diǎn)復(fù)雜,但是它整個(gè)的思維是:
    同時(shí)遍歷兩個(gè)字符串相同位置
    1.字符相等,而且字符必須是大寫(xiě)字母,且必須在’A’ ~ ‘G’ 之間。(星期幾)
    2.字符相等,而且字符必須在’A’ ~ ‘N’ 或 ‘0’ ~ '9’之間 (小時(shí))
    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; //及時(shí)退出, 這兩個(gè)是矛盾的 }else if(str[0][j] >= '0' && str[0][j] <= '9') {hour = str[0][j] - '0';break; //及時(shí)退出,這兩個(gè)是矛盾的 }}}}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; }

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

    #include <iostream> #include <string.h> #include <stdio.h> using namespace std;int main() {char str[4][61] = {" "}; //四個(gè)字符串。int i, j; char c1, c2, c3, c4; //用來(lái)保存臨時(shí)字符。 string wens[7] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};int flag = 0; //用來(lái)判斷星期是不是已經(jīng)輸出!! int hour; //小時(shí)for(i=0; i<4; i++) {cin>>str[i];}for(j=0; j<61; j++) {if(str[0][j] >= 'A' && str[0][j] <= 'N') { //不是任意一個(gè)字母就行的!!必須是在范圍之內(nèi)的 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) { //是第一個(gè)字母相同后面找再相同的!! hour = c2 - '0';break;}}if(str[0][j] >= 'A' && str[0][j] <= 'G') { //不是任意一個(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]; //最后一個(gè)條件只要是相同的字母就行,不區(qū)分大小寫(xiě) if(c4 == str[3][j]) {printf("%02d", j);break;}}} return 0; }

    總結(jié)

    以上是生活随笔為你收集整理的PAT乙类1014 福尔摩斯的约会 (20 分)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。