PAT乙级考试-1014 福尔摩斯的约会

题目
PAT乙级考试-1014 福尔摩斯的约会_第1张图片
PAT乙级考试-1014 福尔摩斯的约会_第2张图片
思路
本题的难点又在于理解题意,观察输入输出样例和自己实测,题目中的“第一对相同的大写字母”是要求这两个字母要“值相同且在各自串中的位置相同”,这无疑大大降低了难度,如果没有位置相同的条件,确定第一对相同的大写字母要困难不少;后面两个数据类似
另外,由于一周只有7天,则标识星期的数据必须限制在A~G,类似的标识小时的数据必须在0到9以及A到N之间,实测如果没有这两个条件,只限制在A到Z之间各会有一个用例无法通过
理清楚题意后就比较简单里,设置day,hour,min三个变量各自统计出结果,再按照规定打印即可

#include
int main(void)
{
     
	char day, hour;
	int min, i, j;
	char ch[4][60];
	const char* week[8] = {
      " ","MON","TUE","WED","THU","FRI","SAT","SUN" };
	for (i = 0; i < 4; i++)
		scanf("%s", ch[i]);

	for (i = 0, j = 0; ch[0][i] < 'A' || ch[0][i]>'G' || ch[0][i] != ch[1][j]; i++, j++);
	day = ch[0][i];
	for (i = i + 1, j = j + 1; (ch[0][i] < 'A' || ch[0][i]>'N') && (ch[0][i] < '0' || ch[0][i]>'9') || ch[0][i] != ch[1][j]; i++, j++);
	hour = ch[0][i];
	for (i = 0, j = 0; ch[2][i] < 'A' || ch[2][i]>'z' || ch[2][i] != ch[3][j]; i++, j++);
	min = i;

	printf("%s ", week[day - 'A' + 1]);
	if (hour <= '9')
		printf("0%d:", hour - '0');
	else
		printf("%d:", hour - 'A' + 10);
	if (min < 10)
		printf("0%d", min);
	else
		printf("%d", min);
	return 0;
}

你可能感兴趣的:(PAT乙级考试,算法,c语言)