题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805308755394560
未AC代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int main(){
char week[7][5]={"MON","TUE","WED","THU","FRI","SAT","SUN"};//第一维是元素个数,第二维是元素长度
char A_1[70],A_2[70],B_1[70],B_2[70];
scanf("%s%s%s%s",A_1,A_2,B_1,B_2);
int i;
int len_1=strlen(A_1);
int len_2=strlen(A_2);
int len_3=strlen(B_1);
int len_4=strlen(B_2);
for(i=0;i<len_1&&i<len_2;i++){
if((A_1[i]==A_2[i])&&A_1[i]>='A'&&A_1[i]<='G')//读完之后break
{
printf("%s ",week[A_1[i]-'A']);
break;
}
}
for(i++;i<len_1&&i<len_2;i++){
if(A_1[i]==A_2[i]){
if(A_1[i]>='A'&&A_1[i]<='N'){
printf("%02d:",A_1[i]-'A'+10);
break;
}
else if(A_1[i]>='0'&&A_1[i]<='9'){
printf("%02d",A_1[i]-'0');//%2d是输出占用两个空格,%02d输出带有0的数字
break;
}
}
}
for(i=0;i<len_3&&i<len_4;i++){
if(B_1[i]==B_2[i]&&((B_1[i]>='A'&&B_1[i]<='Z')||(B_1[i]>='a'&&B_1[i]<='z')))
printf("%02d",i);
}
}
AC代码:
#include<iostream>
using namespace std;
int main()
{
string a,b,c,d;
int flag=0;
string week[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
cin>>a>>b>>c>>d;//cin读取字符串,以空格作为结束,
int length1=a.length()>b.length()?b.length():a.length();
for(int i=0;i<length1;i++)
{ //寻找第一个相同的大写字母,因为对应的是星期几,所以只找前7个即可,这是必须的,否则答案错误,
if(a[i]==b[i]&&(a[i]>=65&&a[i]<=71)&&flag==0)
{
flag=1;
cout<<week[a[i]-65]<<" ";
i++;
}//注意找第二对相同的字符的时候,是从第一队相同大写字母后面找
//该字符必须在0-9或者A-N之间才行。
if(flag==1&&a[i]==b[i])
{
if(a[i]>='0'&&a[i]<='9')
{
cout<<"0"<<a[i]-'0'<<":";
break;
}
//必规定其字母范围,不然 答案错误
if(a[i]>='A'&&a[i]<='N')
{
cout<<a[i]-65+10<<":";
break;
}
}
}
int length2=c.length()>d.length()?d.length():c.length();
for(int i=0;i<length2;i++)
{ //后两字符串必须满足是两个英文字母相等才可以
if(c[i]==d[i]&&((c[i]>=65&&c[i]<=90)||(c[i]>=97&&c[i]<=122)))
{
if(i<=9) //不足两位数补0
{
cout<<"0"<<i<<endl;
break;
}
else
{
cout<<i<<endl;
break;
}
}
}
return 0;
}