当前位置: 首页 > news >正文

结构体1~5(1414. 期末考试成绩排名、1490. 坐标排序、1315. 遥控飞机争夺赛、1730. 购买贺年卡、1499. 宇宙总统2)

题单地址:题单中心-东方博宜OJ

1414. 期末考试成绩排名

问题描述

期末考试结束了,数学成绩已经出来。

数学老师请你帮忙编写一个程序,可以帮助老师对班级所有同学的考试分数按照由高到低进行排序,并输出按照成绩排序后每个同学的学号、姓名、数学成绩。

输入

第一行是一个整数 n( n ≤ 100 ),代表班级的总人数;

接下来 n 行,每行有 3 个数据,第一个数据是某个同学的学号,第二个数据是该同学的姓名的拼音(拼音不含空格),第三个数据是该同学的数学成绩(成绩是整数);

输出

按照数学成绩由高到低输出每个同学的学号、姓名、数学成绩,每行含 1 个同学的 3 个数据,3 个数据用空格隔开。(如果出现多个同学数学成绩相同,则按照学号由小到大输出,不存在多个同学学号相同的情况)

样例

输入

3

1 zhangfang 98

2 liming 100

3 sunhua 99

输出

2 liming 100

3 sunhua 99

1 zhangfang 98

输入

3

1 zhangfang 95

3 sunhua 100

2 liming 100

输出

2 liming 100

3 sunhua 100

1 zhangfang 95

解析 :使用结构体数组存储所有人的信息,排序使用sort(),难点是写cmp函数。

#include <bits/stdc++.h>
using namespace std;

struct node{
	int score, k;
	string name;
}a[10005];

bool cmp(node a, node b){
	if(a.score == b.score)return a.k < b.k;
	return a.score > b.score;
}

int main() {
	int n, k;
	cin >> n;
	for(int i = 0; i < n; i++){
		cin >> a[i].k >> a[i].name >> a[i].score;
	}
	sort(a, a+n, cmp);
	for(int i = 0; i < n; i++){
		cout << a[i].k << ' ' << a[i].name << ' ' << a[i].score << endl;
	}
	return 0;	
} 

1490. 坐标排序

问题描述

输入 n 个不同的坐标,按 x 轴的值从小到大排序,如果 x 相同,则按照 y 排序。

输入

第 1 行是一个整数 n( n ≤ 10000 )。

接下来有 n 行,每行有 2 个整数,代表了 1 个点的坐标。

输出

输出 n 行,每行有 2 个整数,输出排序后的 n 个坐标。

样例

输入

4

-1 -1

1 1

-1 1

1 -1

输出

-1 -1

-1 1

1 -1

1 1

解析:每个点有两个信息,同样使用结构体数组存储,sort()函数排序,难点在cmp函数。

#include <bits/stdc++.h>
using namespace std;

struct node{
	int x, y;
}a[10005];

bool cmp(node a, node b){
	if(a.x == b.x)return a.y < b.y;
	else return a.x < b.x;
}

int main() {
	int n;
	cin >> n;
	for(int i = 0; i < n; i++){
		cin >> a[i].x >> a[i].y;
	}
	sort(a, a+n, cmp);
	for(int i = 0; i < n; i++){
		cout << a[i].x << ' ' << a[i].y << endl;
	}
	return 0;	
} 

1315. 遥控飞机争夺赛

问题描述

红太阳杯遥控飞机大赛拉开帷幕。比赛规则为,每位选手让自己的飞机从起点到终点飞行 5 次,组委会记录 5 次的飞行的成绩之后去掉一个最大成绩、一个最小成绩后计算剩余 3 个成绩的平值(平均分保留 3 位小数)作为该选手的最终成绩。

有 n 名选手参加了比赛,从键盘读入每位选手的编号以及他们的 5 次飞行的成绩。

请根据 n 名选手的比赛成绩,编程计算出冠军、亚军、季军的编号以及组委会计算出的成绩。(假设不存在多名选手成绩正好一样)

输入

第一行为一个整数 n ,代表参加比赛的选手数量( 4 ≤ n ≤ 100)

后面的 n 行,每行有 6 个数,第一个数是选手的编号,后 5 个数为选手的 5 次飞行的成绩。

输出

3 行:

第一行输出冠军的编号及飞行成绩(保留 3 位小数)用空格隔开 2 个数;

第二行输出亚军的编号及飞行成绩;

第三行输出季军的编号及飞行成绩。

样例

输入

4

11 58 59 60 61 62

18 59 60 61 62 63

23 65 64 63 62 62

10 60 61 61 65 62

输出

23 63.000

10 61.333

18 61.000

解析:使用结构体输出存储计算结果,使用sort排序,难点依旧cmp的编写。

#include <bits/stdc++.h>
using namespace std;

struct node{
	double score;
	int k;
}a[10005];

bool cmp(node a, node b){
	return a.score > b.score;
}

int main() {
	int n, k, b[6];
	cin >> n;
	for(int i = 0; i < n; i++){
		int sum = 0;
		cin >> a[i].k;
		for(int j = 0; j < 5; j++)cin >> b[j];
		sort(b, b+5);
		for(int j = 1; j < 4; j++)sum += b[j];
		a[i].score = sum / 3.0;
	}
	sort(a, a+n, cmp);
	for(int i = 0; i < 3; i++){
		printf("%d %.3lf\n", a[i].k, a[i].score);
	}
	return 0;	
} 

1730. 购买贺年卡

问题描述

新年快到了,笑笑打算给他的好朋友们发贺年卡,而且他已经选好了自己要购买的贺卡的样式。

俗话说得好,货比三家,笑笑来到商店,看了各个商铺这种贺卡的价钱。不仅如此,笑笑还记住了每个商铺的存货量。已知笑笑打算购买 m 张贺卡,问他最少花多少钱。

输入

第一行两个整数 m 和 n 。其中 m 表示要购买的贺卡的数量,n 表示商铺的个数。

以下 n 行,每行两个整数,分别表示该商铺这种贺卡的单价和存货量。

输出

仅一个数,表示笑笑花的最少钱数。

样例

输入

10 4

4 3

6 2

8 10

3 6

输出

36

 解析:同上,注意cmp的编写。

#include<bits/stdc++.h>
using namespace std;

int n, r;
int sum = 0, ans = 0;
struct node{
	int rmb, k;//单价和库存 
}a[1005];

bool cmp(node a, node b){
	return a.rmb < b.rmb;
}

int main(){
    cin >> r >> n;
    for(int i = 0; i < n; i++){
    	cin >> a[i].rmb >> a[i].k;
	}
	sort(a, a+n, cmp);
	for(int i = 0; i < n; i++){
		if(r <= a[i].k){
			sum += a[i].rmb * r;
			break;
		}
		else sum += a[i].rmb * a[i].k;
		r -= a[i].k;
	}
	cout << sum;
	return 0;
}

1499. 宇宙总统2

问题描述

地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 n 个非凡拔尖的人竞选总统,现在投票已经结束,获得选票最多的人将荣登总统的宝座,如果有多个候选人获得票数一致,那么名字字典码最大的人将获得总统的宝座。请你编程计算出谁能够胜任总统的职位。

比如,有 10 个人参加了投票,这 10 张选票结果分别是。

zhangguoqiang
liming
wangfang
zhangguoqiang
wangfang
zhangguoqiang
zhaofei
zhaofei
wangfang
zhaofei

统计结果 zhangguoqiang 、wangfang 、zhaofei 三人每人都是 3 票,由于 zhaofei 名字的字典码最大,zhaofei 当选为本届宇宙总统。

输入

第 1 行是一个整数 nn ,代表投票的总数。(n ≤ 1000)

第 2行~ 第 n+1 行,每行是一个得到选票的人的名字(名字一定是小写的拼音,没有空格)。

输出

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

样例

输入

10

liming

wangfang

zhangguoqiang

zhangguoqiang

wangfang

zhangguoqiang

zhaofei

zhaofei

wangfang

zhaofei

输出

zhaofei 3

zhangguoqiang 3

wangfang 3 l

iming 1

 解析:这里使用map充当投票箱的作用,最后在把结果复制到结构体数组中,排序,输出。

#include <bits/stdc++.h>
using namespace std;

struct node{
	string name;
	int k;
}a[10005];

bool cmp(node a, node b){
	if(a.k == b.k)return a.name > b.name;
	return a.k > b.k;
}

int main() {
	int n, k = 0;
	string s;
	cin >> n;
	map<string, int> m;
	for(int i = 0; i < n; i++){
		cin >> s;
		if(m.find(s) == m.end()){
			m[s] = 1;
			a[k++].name = s;
		}
		else m[s]++;
	}
	for(int i = 0; i < k; i++){
		a[i].k = m[a[i].name];
	}
	sort(a, a+n, cmp);
	for(int i = 0; i < k; i++){
		cout << a[i].name << ' ' << a[i].k << endl;
	}
	return 0;	
} 

相关文章:

  • Windows Qt动态监测系统分辨率及缩放比变化
  • LGA封装 Z3588开发板,8K视频编解码
  • 设计模式使用Java案例
  • 《AI大模型趣味实战》No2 : 快速搭建一个漂亮的AI家庭网站-相册/时间线/日历/多用户/个性化配色(中)
  • Leetcode-131.Palindrome Partitioning [C++][Java]
  • RUOYI框架在实际项目中的应用三:Ruoyi微服务版本-RuoYi-Cloud
  • JAVA数据库技术(一)
  • Deepseek学习--工具篇之Ollama
  • 基于C#的以太网通讯实现:TcpClient异步通讯详解
  • 设置echarts legend 图例与文字对齐
  • 股指期货有卖不出去的时候吗?
  • 在线 SQL 转 flask SQLAlchemy 模型
  • ctf web入门知识合集
  • 阿里wan2.1本地部署
  • Webpack总结
  • MySQL配置文件my.cnf详解
  • 抽象工厂模式 (Abstract Factory Pattern)
  • 蓝桥杯专项复习——结构体、输入输出
  • 花生好车:重构汽车新零售生态的破局者
  • HTML5前端第三章节
  • 安徽凤阳通报鼓楼瓦片脱落:去年3月维修竣工,已成立调查组
  • 中美博弈新阶段,这个“热带中国”火了
  • 天问二号探测器顺利转入发射区
  • 《五行令》《攻守占》,2个月后国博见
  • 温州通报“一母亲殴打女儿致其死亡”:嫌犯已被刑拘
  • 新华时评:让医德医风建设为健康中国护航