题目描述
小花梨来到了一家面包店,发现这家的面包有一个特点:在每个面包上都有一个字母。
小花梨想买5个面包希望可以集齐"ECUST"或者"ecust"。
有强迫症的小花梨希望买的面包要么全是大写字母,要么全是小写字母。
在无法集齐"ECUST"和"ecust"的情况下,只要能集齐这五种字母(不区分大小写),它也会买下来。
现在告诉你面包店的所有面包上面的字母,请你告诉小花梨是否可以集齐"ECUST"或者"ecust"或者集齐这五种字母。
输入
第一行一个整数T,表示有T组数据(1≤T≤1000)
对于每组数据,输入第一行,只有一个整数n(1≤n≤60),表示面包店的面包数目
第二行输入一行长度为n的字符串,只由大写字母和小写字母组成,表示面包店每个面包上面的字母
输出
对于每一组数据,先输出"Case x: “(不含引号)
x表示第x组测试数据,从1开始编号
如果只能集齐"ECUST”,那就输出"ECUST"
如果只能集齐"ecust",那就输出"ecust"
如果两者都可以集齐,那就输出"ECUST and ecust"
如果两者都不能集齐,但是可以集齐这五种字母,输出"Yes"
其余情况输出"No"
样例输入
5
5
ECUST
5
ecust
10
CcEeUuSsTt
5
cuEst
7
Aaccefg
样例输出
Case 1: ECUST
Case 2: ecust
Case 3: ECUST and ecust
Case 4: Yes
Case 5: No
Code
//利用c++语言中string的find函数特性,即可轻松解题
#include <bits/stdc++.h>
using namespace std;
int main(){
int t,num=1;
cin>>t;
while(t--){
int n,f1,f2,f3;
f1=f2=f3=0;
cin>>n;
string s;
cin>>s;
cout<<"Case "<<num<<": ";
if(s.find('E')!=s.npos&&s.find('C')!=s.npos&&s.find('U')!=s.npos&&s.find('S')!=s.npos&&s.find('T')!=s.npos) f1=1;
if(s.find('e')!=s.npos&&s.find('c')!=s.npos&&s.find('u')!=s.npos&&s.find('s')!=s.npos&&s.find('t')!=s.npos) f2=1;
if(f1==0&&f2==0){
if(((s.find('E')!=s.npos)||(s.find('e')!=s.npos))&&((s.find('C')!=s.npos)||(s.find('c')!=s.npos))&&((s.find('U')!=s.npos)||(s.find('u')!=s.npos))&&((s.find('S')!=s.npos)||(s.find('s')!=s.npos))&&((s.find('T')!=s.npos)||(s.find('t')!=s.npos)))
f3=1;
}
if(f1==1&&f2==1) cout<<"ECUST and ecust"<<endl;
else if(f1==1) cout<<"ECUST"<<endl;
else if(f2==1) cout<<"ecust"<<endl;
else if(f3==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
num++;
}
return 0;
}