C++ 蓝桥杯历届试题 —— 宇宙总统所有题型(附代码)

基础题讲解

题目要求

        地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在投票已经结束,获得选票最多的人将荣登总统的宝座,如果有多个候选人获得票数一致,那么编号较大的候选人将就任总统的职位。请你编程计算出谁能够胜任总统的职位。
比如,有5位候选人参加竞选,他们的编号分别是1 2 3 4 5,有10个人为他们投票,投票结果是:1 1 1 1 1 2 2 3 4 5,那么1号候选人当选为宇宙总统。

输入格式

第1行是一个整数n,代表投票的总数。(n<=1000)
第2行有n个整数,代表这些选票投给了哪些编号的候选人(候选人编号都是1~100之间的整数)。

输出格式

输出一个整数,代表获得总统职位的候选人的编号。

输入样例

10
1 1 1 1 1 2 2 3 4 5

输出样例

1

题目代码及思路

        运用桶排序,将对应编号加入合适的桶中,在进行比较排序,最后进行输出。

#include <iostream>
#include <algorithm>
using namespace std;
int t[200];
int main(){
    int n,mxi=0;
    cin>>n;
    for(int i=0;i<n;i++){
        int x;
        cin>>x;
        t[x]++;
        if(t[x]>t[mxi]){
            mxi++;
        }else if(t[x]==t[mxi]){
            if(x>mxi){
                mxi=x;
            }
        }
    }
    cout<<mxi;
    
    return 0;
}

进阶题点击

题目要求

        地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在投票已经结束,获得选票最多的人将荣登总统的宝座,如果有多个候选人获得票数一致,那么名字字典码最大的人将获得总统的宝座。请你编程计算出谁能够胜任总统的职位。
比如,有10个人参加了投票,这10张选票结果分别是。
zhangguoqiang
liming
wangfang
zhangguoqiang
wangfang
zhangguoqiang
zhaofei
zhaofei
wangfang
zhaofei
        统计结果zhangguoqiang、wangfang、zhaofei三人每人都是3票,由于zhaofei名字的字典码最大,zhaofei当选为本届宇宙总统。

输入格式

第1行是一个整数n,代表投票的总数。(n<=1000)
第2行~第n+1行,每行是一个得到选票的人的名字(名字一定是小写的拼音,没有空格)。

输出格式

输出n行,按照每个人的得票数由高到低的顺序输出每个人的名字和得票数,中间用空格隔开。(如果有多个人得票数一致,则名字字典码大的人排在前面)

输入样例

10
liming
wangfang
zhangguoqiang
zhangguoqiang
wangfang
zhangguoqiang
zhaofei
zhaofei
wangfang
zhaofei

输出样例

zhaofei 3
zhangguoqiang 3
wangfang 3
liming 1

题目代码及思路

运用结构体,结构体的语法:struct 结构体名 { 类型名 成员名;类型名 成员名;};

将名字和投票数录入结构体,在进行反向排序,最后输出结果。

#include<bits/stdc++.h>
using namespace std;
struct person{
	string name;
	int cnt;
};
person p[1005];
int k=0;    //当前获选人的数量 
bool cmp(person a,person b){
	if(a.cnt>b.cnt) return true;
	if(a.cnt<b.cnt) return false;
	return a.name>b.name;
}
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		string s;
		cin>>s;
		bool flag=false;
		for(int j=0;j<k;j++){
			if(p[j].name==s){
				p[j].cnt++;
				flag=true;
				break;
			}
		}if(flag==false){
			p[k].name=s;
			p[k].cnt=1;
			k++;
		}
	}
	sort(p,p+k,cmp);
	for(int i=0;i<k;i++){
		cout<<p[i].name<<" "<<p[i].cnt<<endl;
	}
	return 0;
}

举一反三

题目要求

        某购物网站进行优惠活动,每个商品当天第一个订单可以打75折(75折的意思是用原价 * 0.75)。
        这天网站先后依次收到了N个订单,订单的数据形式是:商品名 价格(单价*数量),商品名是长度不超过20的字符串(商品名不含空格)。
        请按商品名的字典顺序,输出当天每种商品名和其售出的总价。

输入格式

        第一行是一个整数N(N<100000),代表了订单的数量
        接下来有N行,每行第一个数据是商品名的拼音(没有空格),第二行是商品价格(最多包含1位小数)

输出格式

        若干行,按照商品名的字典顺序,输出当天每种商品名和其售出的总价(总价保留1位小数)

输入样例

5
shouji 1080.5
shouji 9800.0
diannao 2980.2
diannao 2280.5
diannao 1000.0

输出样例

diannao 5515.6
shouji 10610.4

题目代码及思路

与上一题类似,不过“第一个订单可以打75折”以及增加价格是不同类型(double类型)。

#include<bits/stdc++.h>
using namespace std;
struct person{
	string name;
	double cnt;
};
person p[1005];
int k=0;    //当前上商品的数量 
bool cmp(person a,person b){
	return a.name<b.name;
}
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		string s;
		double x;
		cin>>s>>x;
		bool flag=false;
		for(int j=0;j<k;j++){
			if(p[j].name==s){
				p[j].cnt+=x;
				flag=true;
				break;
			}
		}if(flag==false){
			p[k].name=s;
			p[k].cnt=x*0.75;
			k++;
		}
	}
	sort(p,p+k,cmp);
	for(int i=0;i<k;i++){
		printf("%s %.1f\n",p[i].name.c_str(),p[i].cnt);
	}
	return 0;
}

C++ 名言

        自信来自实力,实力源自努力,没有实力讲求自信,是水中浮萍

就让我们一起继续学习C++,一起进步。

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗者才子酒中仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值