PAT.乙级1014. 福尔摩斯的约会 (20)
2016-08-24 22:48
471 查看
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
PAT链接
思路:
1.接收4个字符串,对第1,2个字符串相同位置的字符中,先查找第一个出现的属于A~G中的字符,找出对应星期。接着查找相同字符中第二个出现的且属于0~9或A~N的字符,找出对应小时2.对第3,4个字符串中相同位置的字符,查找第一个字母(a~z|| A~Z),找出对应分钟
代码:
/** * @tag PAT_B_1014 * @authors R11happy (xushuai100@126.com) * @date 2016-8-23 22:09-22:55 * @version 1.0 * @Language C++ * @Ranking 415/1612 * @function null */ #include <cstdio> #include <cstdlib> #include <cstring> /* 如果要提前存储,也可以写成 char Clock[] = "0123456789ABCDEFGHIJKLMN"; 不过要多一位存储'\0' */ /*char Clock[24] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N' };*/ char Week[7][5] = { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" }; int main(int argc, char const *argv[]) { char str1[70], str2[70], str3[70], str4[70]; scanf("%s%s%s%s", str1, str2, str3, str4); int cnt = 0; for (int i = 0; str1[i] != '\0' && str2[i] != '\0'; i++) { /*注意:要在第一个输出之后才接着找第二个相同字符*/ if (str1[i] == str2[i]) { /*输出星期*/ if (cnt == 0) { int index = str1[i] - 'A'; if (index >= 0 && index <= 6) { printf("%s ", Week[index]); cnt++; } } /*输出小时*/ else /*if (cnt == 1)*/ { /* for (int j = 0; j<24; j++) { if (Clock[j] == str1[i]) { printf("%02d:", j); cnt++; //只输出一次,不加会输出多次 } }*/ if (str1[i] >= '0' && str1[i] <= '9') { printf("%02d:", str1[i] - '0'); break; } else if (str1[i] >= 'A' && str1[i] <= 'N') { printf("%02d:", str1[i] - 'A' + 10); break; } } } } /*输出分钟*/ for (int i = 0; str3[i] != '\0' && str4[i] != '\0'; i++) { if (str3[i] == str4[i]) { if ((str3[i] >= 'a' && str3[i] <= 'z') || (str3[i] >= 'A' && str3[i] <= 'Z')) { printf("%02d", i); break; //输出一个后要马上结束输出 } } } return 0; }
收获:
1.字符在计算机中通过ASCII码存储,通过ASCII数值的计算限定字符2.写完之后记得顺着思路走一遍,分支情况及时加break;
3.用数组存储多个字符,连在一起写可以提高效率
/* 如果要提前存储,也可以写成 char Clock[] = "0123456789ABCDEFGHIJKLMN"; 不过要多一位存储'\0' */ /*char Clock[24] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N' };*/
相关文章推荐
- 1014. 福尔摩斯的约会 (20) PAT乙级真题
- 浙江大学PAT_乙级_1014. 福尔摩斯的约会 (20)
- PAT 乙级练习题1014. 福尔摩斯的约会 (20)
- PAT乙级1014. 福尔摩斯的约会(20)
- 1014. 福尔摩斯的约会 (20) PAT 乙级
- 1014. 福尔摩斯的约会 (20)-PAT乙级
- PAT乙级1014. 福尔摩斯的约会 (20)
- PAT乙级 1014. 福尔摩斯的约会 (20)
- PAT-乙级-1014. 福尔摩斯的约会 (20)
- 【PAT】(乙级)1014. 福尔摩斯的约会 (20)
- PAT 乙级 1014. 福尔摩斯的约会 (20) Java版
- 1014. 福尔摩斯的约会 (20)--PAT乙级真题-浙大PAT乙级真题java实现
- pat 乙级 1014 福尔摩斯的约会(20)
- PAT乙级—1014. 福尔摩斯的约会 (20)-native
- PAT-乙级-1014. 福尔摩斯的约会 (20)
- PAT乙级 1014. 福尔摩斯的约会 (20)
- PAT乙级真题及训练集(23)--1014. 福尔摩斯的约会 (20)(细节决定成败)
- PAT乙级 1014. 福尔摩斯的约会 (20)
- [PAT乙级]1014. 福尔摩斯的约会 (20)
- 1014. 福尔摩斯的约会 (20)-PAT乙级真题