PAT B1014
福尔摩斯的约会,题本身没有任何难度,但是,这个读题有点问题
题目里面暗含了关于三个相同的限定
第一个要求是A-G
第二个要求是0-9或者A-N
第三个要求是英文字母
学会读题
另外复习了一下char*change()
这种里面最后return的东西要定义成static避免被回收
还有就是,在for循环里面ij同时出现,写一写限定条件就写乱了,这种很难检查,如果出现未知错误首先确认这种,或者其他命名非常接近的地方
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char*daystring(char a) { static char*ans; if(a=='A') ans="MON"; if(a=='B') ans="TUE"; if(a=='C') ans="WED"; if(a=='D') ans="THU"; if(a=='E') ans="FRI"; if(a=='F') ans="SAT"; if(a=='G') ans="SUN"; return ans; } int hour(char a) { if(a>='0' && a<='9') return a-'0'; return a-'A'+10; } int main() { char str1[1000]; char str2[1000]; char str3[1000]; char str4[1000]; scanf("%s %s %s %s",str1,str2,str3,str4); //printf("%s\n%s\n%s\n%s\n",str1,str2,str3,str4); char same1,same2; int same3,i; for(i=0;i<=min(strlen(str1),strlen(str2))-1;i++) { if(str1[i]==str2[i] && str1[i]>='A' && str1[i]<='G') { same1=str1[i]; break; } } // printf("same1:%c\n",same1); for(int j=i+1;j<=min(strlen(str1),strlen(str2))-1;j++) { if(str1[j]==str2[j] &&((str1[j]>='0' && str1[j]<='9')||(str1[j]>='A' && str1[j]<='N'))) { same2=str1[j]; break; } } //printf("same2:%c",same2); for(int i=0;i<=min(strlen(str3),strlen(str4))-1;i++) { if(str3[i]==str4[i] && ((str3[i]>='a' && str3[i]<='z')||(str3[i]>='A' && str3[i]<='Z'))) { same3=i; break; } } char*str=daystring(same1); int h=hour(same2); printf("%s ",str); printf("%02d:%02d",h,same3); return 0; }
时间才能证明一切,选好了就尽力去做吧!