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