user-0 提问: PAT 乙级题目 1014. 福尔摩斯的约会 (20) ；求帮助，求教，输出与答案一致但是就是通不过。。

回复:
user: user-1
content: 服了自己了，星期天“SUN”写成了“SUM”，卡了一下午

user: user-1
content: 我是测点5死活过不去，吐血了 #include <stdio.h>  int main() { 	char a[65],b[65],c[65],d[65]; 	char Day[][4]={"MON","TUE","WED","THU","FRI","SAT","SUM"}; 	char day,hour,min; 	int i; 	scanf("%s",&a); 	scanf("%s",&b); 	scanf("%s",&c); 	scanf("%s",&d); 	for(i=0;a[i]!='\0'&&b[i]!='\0';i++){ 		if(a[i]==b[i]&&a[i]>='A'&&a[i]<='G'){ 			day=a[i]; 			break; 		} 	} 	for(i++;a[i]!='\0'&&b[i]!='\0';i++){ 		if(a[i]==b[i]&&((a[i]>='A'&&a[i]<='N')||(a[i]>='0'&&a[i]<='9'))){ 			hour=a[i]; 			break; 		} 	} 	for(i=0;c[i]!='\0'&&d[i]!='\0';i++){ 		if(c[i]==d[i]&&((c[i]>='a'&&c[i]<='z')||(c[i]>='A'&&c[i]<='Z'))){ 			min = i; 			break; 		} 	} 	printf("%s ",Day[day-'A']); 	if(hour>='0'&&hour<='9')	printf("%02d:",hour-'0'); 	else if(hour>='A'&&hour<='N')	printf("%02d:",hour-'A'+10); 	printf("%02d",min); 	return 0; }

user: user-0
content: 使用环境以及输入输出。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:边界条件 输入输出格式 …… 边界条件我不好说，只能说符合对应条件。比如说:1,2行字符相等,大写,位置;3行提取相同字符并算出对应4行字符的位置。 输入输出格式是严格对应了，题目要求说：输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串。；输入对应，输出参考了别人的答案，在0-9的数字上输出如07;09这样的也做到了。但是依旧不行啊。。pat测试说答案错误。  引用 2 楼 DelphiGuy 的回复:if (a[m] == b[n] && m == n && a[m] >= 'A'&&a[m] <= 'Z')//字符相等,大写,位置,符合要求 ================================================================= 题目中只说了前面两字符串中第1对相同的大写英文字母代表星期，没有说位置要相同 确实题目中没说位置相同。然而。。 1.我试过以if (a[m] == b[n]  && a[m] >= 'A'&&a[m] <= 'Z')这种形式提交依旧答案错误。 2.我找的参考答案中 有说正确的是要位置对应 参考答案：http://blog.163.com/yutao_inx_319/blog/static/2072340072014837418589/ 3.基于以上两点，我最终选择了位置相对应，但是还是错的。。。

user: user-2
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-0
content: 额，没权限编辑已回复的帖子，那么稍微解释下 上面ac的代码中，t变量是无用的，删掉也没问题。 那么为什么会有t变量呢，我只是测试了不用continue;break;的情况下，顺序输出DAY HH。

user: user-0
content: 引用 6 楼 qq_36580086 的回复:这道题今天才做对，提交了近30多次，看了答案才发现是我不会审题。。。  字符串1 2 3 4用a b c d表示 for循环变量用 i 表示 1.for循环找到a[i]==b[i]并且 a[i]>='A'&&a[i]<='G' ，记录DAY，continue； 2.继续运行找到a[i]==b[i]并且a[i]>='0'&&a[i]<='9' || a[i]>='A'&&a[i]<='N'，记录HH，break； 3.再开一个for循环找到c[i]==d[i]并且 c[i]>='a'&&c[i]<='z' || c[i]>='A'&&c[i]<='Z' ，记录MM，break； 先感谢提供了思路理解，一起刷pat，共勉。 总算我也是通过了，我发现分钟的理解有问题，还有时分的代码写的不对。 分钟 我理解成了：第三行提取相同的英文字符比如例子中的“s”并与第四行对比输出对应字符的位置。 时分 则是彻底的代码有问题。嗯。。失败。。。  这里贴一下ac的代码  #include<stdio.h> #include<string.h>  #define MAX 100 int main() { 	char H[][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"}; 	char st1[MAX],st2[MAX],st3[MAX],st4[MAX]; 	scanf("%s",&st1);scanf("%s",&st2);scanf("%s",&st3);scanf("%s",&st4); 	int i,t=0; 	for(i=0;i<strlen(st1);i++) 	{ 		if(t==0&&st1[i]==st2[i]&&st1[i]>='A'&&st1[i]<='G')//第1对相同的!大写英文字母! 		{ 			t=1; 			printf("%s ",H[st1[i]-'A']); 			continue; 		} 		else if(t==1&&st1[i]==st2[i]&&(st1[i]>='A'&&st1[i]<='N'||st1[i]>='0'&&st1[i]<='9'))//第2对相同的!字符! 		{ 			if(st1[i]>='0'&&st1[i]<='9') 			{printf("0%d:",st1[i]-'0');break;}  			else if(st1[i]>='A'&&st1[i]<='N') 			{printf("%d:",st1[i]-'A'+10);break;} 		} 	} 	int j; 	for(j=0;j<strlen(st3);j++) 	{ 	if(st3[j]==st4[j]&&(st3[j]>='a'&&st3[j]<='z'||st3[j]>='A'&&st3[j]<='Z'))//后面两字符串第1对相同的!英文字母(未说大小那么都考虑进去)! 		{ 			if(j<10) 			printf("0%d",j); 			else 			printf("%d",j); 		} 	} 	return 0; }

user: user-3
content: 这道题今天才做对，提交了近30多次，看了答案才发现是我不会审题。。。  字符串1 2 3 4用a b c d表示 for循环变量用 i 表示 1.for循环找到a[i]==b[i]并且 a[i]>='A'&&a[i]<='G' ，记录DAY，continue； 2.继续运行找到a[i]==b[i]并且a[i]>='0'&&a[i]<='9' || a[i]>='A'&&a[i]<='N'，记录HH，break； 3.再开一个for循环找到c[i]==d[i]并且 c[i]>='a'&&c[i]<='z' || c[i]>='A'&&c[i]<='Z' ，记录MM，break；

user: user-2
content: 边界条件 输入输出格式 ……

user: user-4
content: if (a[m] == b[n] && m == n && a[m] >= 'A'&&a[m] <= 'Z')//字符相等,大写,位置,符合要求 ================================================================= 题目中只说了前面两字符串中第1对相同的大写英文字母代表星期，没有说位置要相同