题目链接 http://www.patest.cn/contests/pat-b-practise/1014
大致题意:对比两对字符串,找出第一对字符串中第1对相同的大写英文字母,并且输出其对应的星期数。在比对第一对字符串中第2对相同的字符,输出其对应的钟头。最后找出后面一对字符串中第1对相同的英文字母, 输出其对应的分钟。
我使用了STL中的map来达到字母和表达星期几的字符串之间的映射 ,使用insert(pair<>)的方式来添加map元素,查询用数组方式即可,也算是熟练了一下map怎么用。。
因为题目两个地方都只取第一个相同的,一开始写的时候找到相同元素之后没有立即break掉,导致WA了两发。
AC代码
1 #include <iostream> 2 #include <cstdio> 3 #include <map> 4 using namespace std; 5 string s1,s2,s3,s4; 6 map< char,string > imap; 7 int main() 8 { 9 imap.insert(pair< char, string >('A', "MON")); 10 imap.insert(pair< char, string >('B', "TUE")); 11 imap.insert(pair< char, string >('C', "WED")); 12 imap.insert(pair< char, string >('D', "THU")); 13 imap.insert(pair< char, string >('E', "FRI")); 14 imap.insert(pair< char, string >('F', "SAT")); 15 imap.insert(pair< char, string >('G', "SUN")); 16 while( cin>>s1>>s2>>s3>>s4 ) 17 { 18 int len1=s1.length(); 19 int len2=s2.length(); 20 int len3=s3.length(); 21 int len4=s4.length(); 22 int flag=0; 23 for( int i=0; i<( len1>len2? len2:len1 ); i++ ) 24 { 25 if( s1[i]==s2[i] && flag==0 && s1[i]>=65 && s1[i]<=90 ) 26 { 27 cout<<imap[s1[i]]<<" "; 28 flag=1; 29 continue; 30 } 31 else if( s1[i]==s2[i] && flag==1 ) 32 { 33 if( s1[i]>=48 && s1[i]<=57 ) 34 cout<<"0"<<s1[i]-'0'<<":"; 35 else 36 { 37 if( s1[i]>=65 && s1[i]<=90 ) 38 cout<<s1[i]-'A'+10<<":"; 39 else 40 cout<<s1[i]-'a'+10<<":"; 41 } 42 break; 43 } 44 } 45 for( int i=0; i<( len3>len4? len4:len3 ); i++ ) 46 if( s3[i]==s4[i] && ( (s3[i]>=65 && s3[i]<=90) || (s3[i]>=97 && s3[i]<=122) ) ) 47 { 48 if( i<10 ) 49 cout<<"0"<<i<<endl; 50 else 51 cout<<i<<endl; 52 break; 53 } 54 } 55 return 0; 56 }
第一篇博客。。找自信的,好水啊==