站外题求助
  • 板块学术版
  • 楼主AeeE5x
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/3 02:19
  • 上次更新2024/8/3 09:58:33
查看原帖
站外题求助
708516
AeeE5x楼主2024/8/3 02:19

【 题目描述 】
遥远的外太空,x星人和y星人即将为争夺资源发生战争,x星人获得了y星人发往舰队的密码:“开战时间:87654asCzxcsF 1234asdClkjHF qwewqrE asdasdE”。x星人很快就明白了,开战时间后面的乱码实际上就是舰队发起攻击的时间“星期三 15:06”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第3个字母'C',代表星期三;第2对相同的字符是'F',那是第6个英文字母,代表15点(于是一天的0点到23点由数字0到9、以及大写字母A到N表示。提示:假设第二对相同的字符是E那么就是14点);后面两字符串第1对相同的英文字母'E'出现在第6个位置(从0开始计数)上,代表第6分钟。
现给定两对字符串,请你按照上述方法帮助x星人得到y星人的开战时间。

【 输入 】
输入包含多组测试数据,每组输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串。

【 输出 】
对于每组输入,在一行中输出开战的时间,格式为“DAY HH:MM”,其中“DAY”是某星期的3字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解。

【 样例输入 】
87654asCzxcsF
1234asdClkjHF
qwewqrE
asdasdE

【 样例输出 】
WED 15:06

66分代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
void f(char x){
	string s[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
	cout<<s[x-'A']<<" ";
}
void g(char x){
	if(isdigit(x)) cout<<"0"<<x;
	else cout<<x-'A'+10;
	cout<<":";
}
void h(int x){
	if(x/10==0) cout<<"0";
	cout<<x<<endl;
}
int main(){
	string a1,a2,b1,b2;
	while(cin>>a1>>a2>>b1>>b2){
		int i=0;
		int lena=min(a1.length(),a2.length());
		int lenb=min(b1.length(),b2.length());
		for(i=0;i<lena;i++) if(a1[i]==a2[i]&&isupper(a1[i])){f(a1[i]),i++;break;}
		for(;i<lena;i++) if(a1[i]==a2[i]&&!islower(a1[i])){g(a1[i]);break;} 
		for(i=0;i<lenb;i++) if(b1[i]==b2[i]&&isalpha(b1[i])){h(i);break;}
	}
	
	return 0;
}
2024/8/3 02:19
加载中...