【PAT乙级题目1014】福尔摩斯的约会
来源:互联网 发布:windows live下载地址 编辑:程序博客网 时间:2024/04/28 13:00
福尔摩斯的约会
题目描述:
大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 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
个人总结:理解题目出错。题目的意思其实是两个字符串的上下每一位相对应,判断相同然后输出该字符;而我理解成第一行中的某个字母和下一行的任意一个位置的字母相同。当然这样的想法加大了题目的难度,但最后也还是实现了这样一种思路。即当比较出来第一对相同大写字母的同时,记录c[0]和c[1]查找到的位置(利用全局变量),第二次查找时(即判断小时),刚好跳过了第一次查找相同的位置。
#include<stdio.h>int i=0;char data(char c[][60]);int data2(char c[][60]);char data3(char c[][60],int g);int main(){ int n,date2; int g=0; char c[4][60]; for(int m=0;m<4;m++){ gets(c[m]); } char date = data(c); int date1=date-64; if(date1==1)printf("MON "); if(date1==2)printf("TUE "); if(date1==3)printf("WED "); if(date1==4)printf("THU "); if(date1==5)printf("FRI "); if(date1==6)printf("SAT "); if(date1==7)printf("SUN "); i++; for(;c[1][g]!='\0';g++){ if(c[1][g]==date) break; } g++; char datee = data3(c,g); if(datee>=48&&datee<=57) { date2=datee-48; }else{ date2=datee-64+9; } printf("%d:",date2); int dateee =data2(c); if(dateee/10==0){ printf("0"); } printf("%d",dateee); return 0;} char data(char c[][60]){ for(;;i++){ if(c[0][i]>=65&&c[0][i]<=90){ for(int j=0;c[1][j]!='\0';j++){ if(c[0][i]==c[1][j]) return c[0][i]; } } } return 0; } char data3(char c[][60],int g){ for(;;i++){ if(c[0][i]>=48&&c[0][i]<=57){ for(int q=g;c[1][q]!='\0';q++){ if(c[0][i]==c[1][q]) return c[0][i]; } } if(c[0][i]>=65&&c[0][i]<=90){ for(int q=g;c[1][q]!='\0';q++){ if(c[0][i]==c[1][q]) return c[0][i]; } } } return 0; } int data2(char c[][60]){ for(int k=0;;k++){ if(c[2][k]>=97&&c[2][k]<=122){ for(int f=0;c[3][f]!='\0';f++){ if(c[2][k]==c[3][f]){ return f; } } } } return 0; }
最终正确的代码如下:
#include <stdio.h>int is_num_char(char c){ if(c >= '0' && c <= '9') return c - '0'; if(c >= 'A' && c <= 'N'){ return c - 'A' + 10; } return -1;}int main(){ char sen[4][61]; for(int i = 0; i < 4; i ++){ scanf("%s",&sen[i][0]); } int i = 0; for(; sen[0][i] != '\0' && sen[1][i] != '\0'; i ++){//前两个字符的比较 char c = sen[0][i]; if(sen[0][i] == sen[1][i] && (c >= 'A' && c <= 'G')){ switch(c){ case 'A': printf("MON "); break; case 'B': printf("TUE "); break; case 'C': printf("WED "); break; case 'D': printf("THU "); break; case 'E': printf("FRI "); break; case 'F': printf("SAT "); break; case 'G': printf("SUN "); break; //case 'A': printf("MON "); break; } //printf("DAY %c Now i = %d, j = %d\n",sen[0][i], i, j); break; } //printf("DAY %c Now i = %d, j = %d\n",sen[0][i], i, j); } i ++; int y = i; //printf("Now i = %d, j = %d\n", i, j); for(; sen[0][y] != '\0' && sen[1][y] != '\0'; y ++){//前两个字符的比较 if(is_num_char(sen[0][y]) >= 0 && sen[0][y] == sen[1][y]){//A - N 0 - 9 int hour = is_num_char(sen[0][y]); printf("%d%d:",hour / 10, hour % 10); //printf("Hour %c %d Now i = %d, y = %d\n",sen[0][i], hour, i, y); break; } } for(int m = 0; sen[3][m] != '\0' && sen[2][m] != '\0'; m ++){ char c = sen[2][m]; if(sen[2][m] == sen[3][m] && ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))){ printf("%d%d",m / 10, m % 10); break; } }}
0 0
- 【PAT乙级题目1014】福尔摩斯的约会
- PAT 乙级 1014 福尔摩斯的约会
- pat 乙级 1014 福尔摩斯的约会(20)
- 【PAT 乙级(Basic Level)】福尔摩斯的约会
- PAT乙级 1014. 福尔摩斯的约会
- PAT乙级 福尔摩斯的约会 (20)
- PAT 乙级 1014. 福尔摩斯的约会
- PAT乙级1004-福尔摩斯的约会 (20)
- 1014. 福尔摩斯的约会 (20) PAT 乙级
- PAT乙级练习题B1014.福尔摩斯的约会
- PAT(乙级)1014. 福尔摩斯的约会
- PAT-乙级-1014. 福尔摩斯的约会 (20)
- PAT.乙级1014. 福尔摩斯的约会 (20)
- 1014. 福尔摩斯的约会 (20)-PAT乙级
- [PAT-乙级]1014.福尔摩斯的约会
- PAT乙级 1014. 福尔摩斯的约会 (20)
- PAT乙级1014. 福尔摩斯的约会 (20)
- PAT乙级 1014. 福尔摩斯的约会 (20)
- 两会闭幕,这里有最全的两会阅读数据!
- AirPlay视频播放协议抓包(非Mirror)
- iOS5中UIViewController的新方法addChildViewController
- HDU P2107 JAVA
- 【我的Android进阶之旅】Android 7.0报异常:java.lang.SecurityException: COLUMN_LOCAL_FILENAME is deprecated;
- 【PAT乙级题目1014】福尔摩斯的约会
- MySQL查询缓存设置 提高MySQL查询性能
- 机器学习-1
- java中jframe 和jpanel的区别 (java的swing界面)
- Java编程思想读书笔记(01)
- 啊第二篇
- 使用动态SQL插入,ORA-00984: 列在此处不允许
- 算法训练 矩阵乘法
- 让VS调试器正确显示UTF-8字符串