首先,我真的超级小白,连用ASCII码判断一个字符在不在一个范围里都不懂.....硬是凑了个数组做遍历来判断,于是代码巨长,但因为逻辑没啥错最后还是通过了......(尽管效率要多低有多低)
我一开始是测试点1、2、4没通过,原因是我没注意hour和minite一样也必须两位数字输出,例如1点要输出01。
最后推荐两个我看得懂的C语言版本的代码(有一些我还没学到的什么cout、>>我真的看不懂QAQ,希望未来的我能回来嘲笑现在的我)
1:PAT乙级1014 福尔摩斯的约会(C语言),测试点124错误及解决_打孔员的博客-CSDN博客
2:(PAT乙级)1014 福尔摩斯的约会(C语言实现)_陈粑粑的小白鞋的博客-CSDN博客
然后这个贴的坑点也总结的很好:PAT乙级 1014 福尔摩斯的约会 坑点分享_海木的的博客-CSDN博客
最后贴上我的傻瓜代码让大家笑一笑......
#include<stdio.h>
int main(){
char a[61];
char b[61];
char c[61];
char d[61];
scanf("%s%s%s%s",a,b,c,d);
int i=0;
char abc[8]={"ABCDEFG"};
int cnt;
int n;
do{
while(a[i]!=b[i]){
i++;
}
cnt=0;
for(n=0;n<7;n++){
if(a[i]==abc[n]){
cnt++;
}
}
i++;
}while(cnt!=1);
i--;
char day[7][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
int m=0;
while(a[i]!=abc[m]){
m++;
}
printf("%s ",day[m]);
m=0;
i++;
char hour[25]={"0123456789ABCDEFGHIJKLMN"};
do{
while(a[i]!=b[i]){
i++;
}
cnt=0;
for(n=0;n<24;n++){
if(a[i]==hour[n]){
cnt++;
}
}
i++;
}while(cnt!=1);
i--;
while(a[i]!=hour[m]){
m++;
}
char num[10][3]={"00","01","02","03","04","05","06","07","08","09"};
if(m>=0&&m<=9){
printf("%s:",num[m]);
}else{
printf("%d:",m);
}
i=0;
char zimu[53]="QWERTYUIOPLKJHGFDSAZXCVBNMmnbvcxzlkjhgfdsapoiuytrewq";
do{
while(c[i]!=d[i]){
i++;
}
cnt=0;
for(n=0;n<52;n++){
if(c[i]==zimu[n]){
cnt++;
}
}
i++;
}while(cnt!=1);
i--;
if(i<10){
printf("%s",num[i]);
}else{
printf("%d",i);
}
return 0;
}