揭阳网站制作,wordpress 笑话主题,装饰公司做网站,长沙整合推广一、题目
大侦探福尔摩斯接到一张奇怪的字条#xff1a;我们约会吧#xff01; 3485djDkxh4hhGE 2984akDfkkkkggEdsb shgsfdk dHyscvnm。大侦探很快就明白了#xff0c;
字条上奇怪的乱码实际上就是约会的时间星期四 14:04#xff0c;因为前面两字符串中第 1 对…一、题目
大侦探福尔摩斯接到一张奇怪的字条我们约会吧 3485djDkxh4hhGE 2984akDfkkkkggEdsb shgsfdk dHyscvnm。大侦探很快就明白了
字条上奇怪的乱码实际上就是约会的时间星期四 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
shgsfdk
dHyscvnm
输出样例
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(i0; i4; i) {cinstr[i];}for(j0; j61; j) {if(str[0][j] str[1][j]) {if(flag 0) {if(str[0][j] A str[0][j] G) {coutweek[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(j0, i0; j61; 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(i0; i4; i) {cinstr[i];}for(j0; j61; 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) {coutwens[c1 - A] ;flag 1;}}}}printf(%02d:, hour); //hour也必须是02d形式 for(j0, i0; j61; 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;
}