#include<bits/stdc++.h>
using namespace std;
string ad[]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
int main(){
string _1,_2,_3,_4;
cin>>_1>>_2>>_3>>_4;
map<char,int> book1,book2;
for(int i=0;i<=_1.size();i++){
if('A'<=_1[i]&&_1[i]<='G'){
book1[_1[i]]=i+1;
}
if((_1[i]>='A'&&_1[i]<='N')||isdigit(_1[i])){
book2[_1[i]]=i+1;
}
}
char ansd,ansh;int q;
for(int i=0;i<_2.size();i++){
if(book1[_2[i]]==i+1){
ansd=_2[i];
q=i;
break;
}
}
for(int i=q+1;i<_2.size();i++){
if(book2[_2[i]]==i+1){
ansh=_2[i];
break;
}
}
int minsize;
if(_3.size()<=_4.size()){
minsize=_3.size();
}
else{
minsize=_4.size();
}
int anst;
for(int i=0;i<minsize;i++){
if(isalpha(_3[i])&&_3[i]==_4[i]){
anst=i;
break;
}
}
printf("%s ",ad[ansd-'A'].c_str());
if(isdigit(ansh)){
printf("%02d:",ansh-'0');//字符型转数字直接-'0’即可只有 char数组可以直接转string单个char不能
}else{
printf("%02d:",ansh-'A'+10);
}
printf("%02d",anst);
return 0;
}
用map做的 始终有两个点没过,我试过把它们的范围改了,并且用map对应他们的相同位置,没卵用,不知道为什么,题干真是服了,不说明白,题面是真坑啊
是真菜啊,寻找第一个第二个 需要先找到第一个然后再找第二个做麻烦了
二刷ac思路 注意及时停止,else 防止钥匙本次使用 第几个 找到后就要立即停止 防止把后面满足的当做答案
#include<bits/stdc++.h>
using namespace std;
string a[]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
int main(){
string _1[4];
for(int i=0;i<4;i++){
cin>>_1[i];
}
int _2,_3,_4,flag=0;
for(int i=0;i<_1[0].size()&&i<_1[1].size();i++){
if(flag==0&&_1[0][i]>='A'&&_1[0][i]<='G'){//7天A--G 测试点4
if(_1[0][i]==_1[1][i]){
_2=_1[0][i]-'A';
flag=1;//上面刚准备的钥匙不能这次就用 这次要不要用 要不要加else
}
} else if(flag==1&&(isdigit(_1[0][i])||_1[0][i]>='A'&&_1[0][i]<='N')){//应该是else if 上面的flag会影响下面
if(_1[0][i]==_1[1][i]){
if(isdigit(_1[0][i]))
_3=_1[0][i]-'0';
else{
_3=_1[0][i]-'A'+10;
}
break;//及时退出而不是取最后一个符合条件的
}
}
}
for(int i=0;i<_1[2].size()&&i<_1[3].size();i++){
if(isalpha(_1[2][i])){
if(_1[2][i]==_1[3][i]){
_4=i;
break;
}
}
}
printf("%s %02d:%02d",a[_2].c_str(),_3,_4);
return 0;
}