问题A:[ECUST2018新生赛]ECUST and ecust

题目描述

小花梨来到了一家面包店,发现这家的面包有一个特点:在每个面包上都有一个字母。
小花梨想买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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值