PAT B1014或A1061 福尔摩斯的约会

//ac了,这题有空再做一遍
//这题一开始的题意理解有问题
//哈希反向的求法 
//%02d的使用 
#include<stdio.h>
#include<string.h>
//#define LOCAL
char week[7][5]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
int main(){
	#ifdef LOCAL
	freopen("B1014data.in","r",stdin);
	freopen("B1014data.out","w",stdout);
	#endif
	//这一题四个字符串没有很密切的递推关系,所以就不需要使用二维数组了 
	char str1[60],str2[60],str3[60],str4[60];
	//这里其实可以,用gets()更好一点,我去真的要疯了 
	scanf("%s",str1); 
	scanf("%s",str2);
	scanf("%s",str3);
	scanf("%s",str4);
	int len1=strlen(str1);
	int len2=strlen(str2);
	int len3=strlen(str3);
	int len4=strlen(str4);
	int i;
	//星期 
	for(i=0;i<len1&&i<len2;i++){
		if(str1[i]==str2[i]&&str1[i]>='A'&&str1[i]<='G'){
			printf("%s ",week[str1[i]-'A']);
			break;//又用到break,注意! 
		}
	}
	//时 
	for(i++;i<len1&&i<len2;i++){
		if(str1[i]==str2[i]){
			//相等了还要分两种情况:0~9的,10~23的,也就是A~N
			if(str1[i]>='0'&&str1[i]<='9'){
				printf("%02d:",str1[i]-'0');//输出字符,所以要减0,与字符0的差值,就是数值 
				break; 
			}
			else if(str1[i]>='A'&&str1[i]<='N'){
				printf("%02d:",str1[i]-'A'+10);//输出10~23,其实从这里看出只要看范围就好写出式子了
				break; 
			}
		}
	}
	//分 
	//寻扎str3和str4中第一队相同位置的A~Z或者a~z范围的英文字母
	for(i=0;i<len3&&i<len4;i++){
		if(str3[i]==str4[i]){
			if(str3[i]>='A'&&str3[i]<='Z'||str3[i]>='a'&&str3[i]<='z'){
				printf("%02d\n",i);
				break;
			}
		}
	}
	return 0; 
} 

你可能感兴趣的:(C++,算法,pat)