PAT乙级 1014福尔摩斯的约会(C语言)

到现在题目也没搞太明白,反正通过了。下面我的理解。
注意:
判断小时数:题目中说是第2对相同字符,应该是星期数后面的相同的字符,并且要满足:

  • 是数字或则A~N之间。

如果是从头开始的第二个满足条件的字符,比如:

  • 3485djDkxh4hhGE
  • 2985akDfkkkkggEdsb
    这两个字符串,第2个满足条件的字符是5,但小时数应该是字符E(星期数D的后一个满足条件的字符)。
#include 
#include 
#include 
#include 

char s[4] = {'\0'};

char *cmp(char s1[], char s2[])
{
	int len, i, flag = 0;
	len = strlen(s1) > strlen(s2) ? strlen(s2) : strlen(s1);
	for(i = 0; i<len; i++)
	{
		if(s1[i] == s2[i])
		{
			if(s1[i] >= 'A' && s1[i] <= 'G')
			{
				if(s[0] == '\0')
				{
					s[0] = s1[i];
					flag = 1;
					continue;
				}
			}
			if(isdigit(s1[i]) && flag)
			{
				if(s[1] == '\0')
				{
					s[1] = s1[i];
				}
			}
			else if(s1[i] >= 'A' && s1[i] <= 'N' && flag)
			{
				if(s[1] == '\0')
				{
					s[1] = s1[i];
				}
			}
		}
	}
	return s;
}

char cmp2(char s1[], char s2[])
{
	int len, i, flag = 0;
	char c;
	len = strlen(s1) > strlen(s2) ? strlen(s2) : strlen(s1);
	for(i = 0; i<len; i++)
	{
		if(s1[i] == s2[i])
		{	
			if(islower(s1[i]))
			{
				c = i + '0';
				break;
			}
			else if(isupper(s1[i]))
			{
				c = i + '0';
				break;
			}
		}
	}
	return c;
}

int main()
{
	char s1[61], s2[61], s3[61], s4[61];
	char day[][4] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
	char *p, c;
	int i, j, k;
	scanf("%s", s1);
	scanf("%s", s2);
	scanf("%s", s3);
	scanf("%s", s4);
	p = cmp(s1, s2);
	i = ((int)(p[0] - 'A') + 1) % 7;

	if(isdigit(p[1]))
	{
		j = (int)(p[1] - '0');
	}
	else
	{
		j = (int)(p[1] - 'A') + 10;
	}
	c = cmp2(s3, s4);
	k = (int)(c - '0');
	printf("%s %02d:%02d\n", day[i], j, k);
	return 0;
}

你可能感兴趣的:(程序设计)