pat-1061

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值