PAT乙級 1014福爾摩斯的約會(C語言)

到現在題目也沒搞太明白,反正通過了。下面我的理解。
注意:
判斷小時數:題目中說是第2對相同字符,應該是星期數後面的相同的字符,並且要滿足:

  • 是數字或則A~N之間。

如果是從頭開始的第二個滿足條件的字符,比如:

  • 3485djDkxh4hhGE
  • 2985akDfkkkkggEdsb
    這兩個字符串,第2個滿足條件的字符是5,但小時數應該是字符E(星期數D的後一個滿足條件的字符)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章