【C++】结构体+String 题目

1.CPA招新Ⅱ

新学期开始啦,我们CPA是2019年6月成立的,创建时有20位元老。现在需要招新啦,每年新学期社团服务中心会组织百团大战。我们CPA迎来第一次招新,我们很期待迎来新成员。

每天都有元老去招新,每招到一个萌新,招新人会在纸上写一个大写字母。CPA共有竞赛部、宣传部、办公部、组织部四个部门。我们规定A代表竞赛部(Competition department),B代表宣传部(Propaganda Department)、C代表办公部(Office)、D组织部(Organization Department)。社团招新后需要统计每一个部门有多少人?有一天会长突然来了,需要你给他一份部门人员名单,名单需要根据人数从大到小排序的,聪明的你会直接写一个程序给会长,让他直接使用程序排序。
输入格式:

输入一行字符串,字符串长度不大于10000。
输出格式:

如果人数相同,按照字典序从小到大排序,每输出一个部门换行。
输入样例:

AABBCCCDDAA

输出样例:

Competition department 4 people!
Office 3 people!
Organization Department 2 people!
Propaganda Department 2 people!

#include<bits/stdc++.h>
using namespace std;
const int N=10001;
struct node
{
    string s;
    char s1;
    int cnt;
};
bool cmp(node a,node b)
{
    //如果人数不同就按人数进行降序 人数相同就字符串升序
    if(a.cnt!=b.cnt) return a.cnt>b.cnt;
    return a.s<b.s;
}
int main()
{
    node p[N],t;//利用p来存储一下长字符串与代号字符
    p[1].s="Competition department";
    p[1].s1='A';
    p[2].s="Propaganda Department";
    p[2].s1='B';;
    p[3].s="Office";
    p[3].s1='C';
    p[4].s="Organization Department";
    p[4].s1='D';
    string a;
    getline(cin,a);
    for(int i=0;i<a.length();i++)//遍历一下字符串
    {
        for(int j=1;j<=4;j++)
            if(p[j].s1==a[i])//找到相同的代号就统计人数
                p[j].cnt++;
    }
     sort(p+1,p+4+1,cmp);//进行排序
    for(int i=1;i<=4;i++)
    {
        cout<<p[i].s<<" "<<p[i].cnt<<" people!"<<endl;
    }
    return 0;
}

2.选民投票

编程统计候选人的得票数。有若干位候选人(n<=10),候选人姓名从键盘输入(候选人姓名不区分大小写,姓名最长为9个字节),若干位选民,选民每次输入一个得票的候选人的名字(姓名最长为9个字节),若选民输错候选人姓名,则按废票处理。程序自动统计各候选人的得票结果,并按照得票数由高到低的顺序排序。最后输出各选票人得票结果和废票信息。
输入格式:

先输入候选人人数n和n名候选人姓名,再输入选民人数m和m位选民的选票。
输出格式:

先根据选票结果由高到低输出各候选人得票结果,再根据废票情况输出废票信息(换行后,输出提示信息“invalid vote:”,再输出废票信息)。

输入样例1:

3
zhang
li
wang
9
Wang
Zhang
zhuang
LI
Liao
ZHANG
WANG
Wang
wang

输出样例1:

wang:4
zhang:2
li:1

invalid vote:
zhuang
Liao

输入样例2:

2
liu
yang
5
Liu
liu
YANG
yang
Liu

输出样例2:

liu:3
yang:2

#include<bits/stdc++.h>
using namespace std;
const int N=20;
struct node
{
    int cnt;
    string s;
};
bool cmp(node a,node b)
{
    return a.cnt>b.cnt;
}
int main()
{
    string st[N],st1[N];//利用 st来全部转换为小写进行判断 st1来储存废票信息
    node p[N];//利用结构体记录一下未被转换的字符串与次数
    int n,k=0;
    cin>>n;
    getchar();
    for(int i=0;i<n;i++)
    {
        cin>>p[i].s;
        st[k++]=p[i].s;
    }
    for(int i=0;i<k;i++)//将st全部转化为小写(也可转换为大写)
    {
        for(int j=0;j<st[i].length();j++)
            if(st[i][j]>='A' and st[i][j]<='Z')
                st[i][j]=st[i][j]-'A'+'a';
    }
    int m;
    int o=0;
    cin>>m;
    for(int i=0;i<n;i++) p[i].cnt=0;//进行对次数初始化 不然会乱码
    getchar();
    while(m--)
    {
        int flag=0;
        string a,b;//输入a来记录选的人(并全部转换为小写字母) b来存储一下未被转换的a
        getline(cin,a);
        b=a;
        for(int i=0;i<a.length();i++)//同样将a全部转化为小写(上同st)
            if(a[i]>='A' and a[i]<='Z')
                a[i]=a[i]-'A'+'a';
        for(int j=0;j<k;j++)
        {
            if(a==st[j])//如果能找到则不为废票
            {
                flag=1;
                p[j].cnt++;
            }
        }
        if(flag==0) st1[o++]=b;//如果是废票 就储存一下
    }
    sort(p,p+n,cmp);//从高到低进行排序
    for(int i=0;i<n;i++)//从高到低输出票数
    {
        cout<<p[i].s<<':'<<p[i].cnt;
        if(i!=n-1)  cout<<endl;
    }
    if(o!=0)//如果有废票则输出
    {
        cout<<endl<<endl;
        cout<<"invalid vote:"<<endl;
        for(int i=0;i<o;i++)
            cout<<st1[i]<<endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值