PAT-B 1014. 福尔摩斯的约会 (20)
2017-02-21 09:26
295 查看
题目链接在此。
下面是相关信息的识别信息和转换关系:
DAY:前两个字符串的第一对相同位置的A-G的大写字母
转换关系:大写字母是从A开始的第几个,就是星期几。
HH:寻找信息DAY的位置之后的第一对相同位置的0-9或A-N的字符
转换关系:0-9对应0-9,A-N对应10-23
MM:后两个字符串的第一对相同位置的A-Z或a-z
对应关系:该字符所在字符串中的位置(从0开始)
最后按照DAY HH:MM的格式输出。
这段代码较冗长,可以移步这里,查看更简洁版的代码。
题意理解
给出4个字符串,前两个字符串包含两个信息:DAY和HH,后面两个字符串包含一个信息:MM。下面是相关信息的识别信息和转换关系:
DAY:前两个字符串的第一对相同位置的A-G的大写字母
转换关系:大写字母是从A开始的第几个,就是星期几。
HH:寻找信息DAY的位置之后的第一对相同位置的0-9或A-N的字符
转换关系:0-9对应0-9,A-N对应10-23
MM:后两个字符串的第一对相同位置的A-Z或a-z
对应关系:该字符所在字符串中的位置(从0开始)
最后按照DAY HH:MM的格式输出。
注意点
“题意理解”中加粗的部分就是解题的题眼,只需要抓住这些就可以,但是需要注意一些细节,比如: 字母范围的限制要严格,否则“答案错误”。AC代码
#include<stdio.h> #include<string.h> //星期对应的字符缩写映射 char WeekMap[7][4] = {"MON","TUE","WED","THU","FRI","SAT","SUN"}; //字符时间对应的整形时间映射 int HourMap(char x){ if(x>= '0' && x<='9'){ //如果是0-9 return (x-'0'); } else{ //否则为A-N return (x-'A')+10; } } bool isUppercaseAtoG(char c) { //if c is a uppercase between A to G return true return (c>='A' && c<='G'); } bool isLetter(char x){ //如果x是一个字母(a-z & A-Z)返回true return ( (x>='a' && x<='z') || (x>='A' && x<='Z') ); } bool isHour(char x){ //判断是不是"时间"位置的0-9或者A-N return ((x>='0' && x<='9') || (x>='A' && x<='N')); } int main(){ char a[60],b[60],c[60],d[60]; //a,b保存前两个字符串,c,d保存后两个字符串 scanf("%s%s%s%s",a,b,c,d); //找星期和小时 int count = 0; //记录找到相同大写字母的次数,只需要找到两对即可 char week, hour; //用来保存星期和小时对应的字符 for(int i = 0; i < strlen(a); i++){ for(int j = 0 ; j < strlen(b); j++){ if(a[i] == b[j] && i==j){ //如果a[i]==b[j],并且两者位置相同 if(isUppercaseAtoG(a[i]) && count == 0){ //第一次相同字符(A-G)表示星期 week = a[i]; count++; }else if(count == 1 && isHour(a[i]) ){ //第二次相同的字符表示小时 hour = a[i]; count++; }else if(count == 2){ break; } } } if(count == 2) break; //提前结束,减小时间复杂度 } //输出星期 printf("%s ",WeekMap[(week-'A')]); //注意+1 //输出小时 printf("%02d:",HourMap(hour)); //找分钟 int pc=0,pd=0; while(1){ if((c[pc] == d[pd]) && isLetter(c[pc]) && isLetter(d[pd]) ) break; //如果c[pc]==d[pd]并且它俩都是字母的情况下,break pc++; pd++; } //打印分钟 printf("%02d\n",pc); return 0; }
这段代码较冗长,可以移步这里,查看更简洁版的代码。
相关文章推荐
- pat 1014. 福尔摩斯的约会 (20)
- PAT1014. 福尔摩斯的约会 (20)
- PAT Basic 1014. 福尔摩斯的约会 (20)(C语言实现)
- PAT(B)1014. 福尔摩斯的约会 (20)
- PAT 1014. 福尔摩斯的约会 (20)
- PAT (Basic Level) Practise (中文)1014. 福尔摩斯的约会 (20)
- PAT 乙级练习题1014. 福尔摩斯的约会 (20)
- PAT乙级1014. 福尔摩斯的约会(20)
- 1014. 福尔摩斯的约会 (20) PAT乙级真题
- PAT (Basic Level) Practise (中文) 1014. 福尔摩斯的约会 (20)
- [PAT乙] 1014. 福尔摩斯的约会 (20)
- 1014. 福尔摩斯的约会 (20)-PAT乙级真题
- PAT 1014. 福尔摩斯的约会 (20)(C语言)
- PAT 1014. 福尔摩斯的约会 (20)--坑点详解
- 1014. 福尔摩斯的约会 (20)--PAT乙级真题-浙大PAT乙级真题java实现
- Java - PAT - 1014. 福尔摩斯的约会 (20)
- 浙江大学PAT上机题解析之1014. 福尔摩斯的约会 (20)
- PAT乙级 1014. 福尔摩斯的约会 (20)
- 【C++】浙大PAT (Basic Level)1014. 福尔摩斯的约会 (20)
- PAT(B) - 1014. 福尔摩斯的约会 (20)