PTA成绩排序(bug记录)

作者 lsr

单位 枣庄学院

给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。

输入格式:

第一行为n (0 < n < 20),表示班里的学生数目;

接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。

名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。

输出格式:

把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。

输入样例:

在这里给出一组输入。例如:

4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28

输出样例:

在这里给出相应的输出。例如:

Joey 92
Hanmeimei 90
Kitty 80
Tim 28

水题,前导0问题,更坑的是还不能直接去拿string去排序,要加前导0。

这里写了个输出补前导0的版本。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl "\n"

ll n;
struct node{
	string name;
	ll c;
}v[1000];

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

void solve(){
	cin >> n;
	for(ll i = 0 ; i < n ; i ++)
		cin >> v[i].name >> v[i].c;
	sort(v,v+n,cmp);
	for(ll i = 0 ; i < n ; i ++)
		cout << v[i].name,printf(" %02d\n",v[i].c);
	return;
}

int main(){
	ll t=1;
	while(t--)solve();
	return 0;
}

### 关于成绩排序PTA实现 在PTA平台上,成绩排序问题通常是通过编写高效的排序算法来解决。常见的方法包括冒泡排序、快速排序以及利用C++ STL中的`sort()`函数。以下是基于用户需求的成绩排序的具体实现。 #### 使用STL `sort()` 函数 C++提供了强大的标准模板库(STL),其中`std::sort`是一个非常方便且高效的排序工具[^4]。下面展示如何使用它对一组学生的成绩进行升序或降序排序: ```cpp #include <iostream> #include <vector> #include <algorithm> // 包含 sort() using namespace std; struct Student { string name; int score; }; // 自定义比较函数用于按分数降序排列 bool compareByScore(const Student &a, const Student &b) { return a.score > b.score; // 降序 } int main() { vector<Student> students = {{"Alice", 85}, {"Bob", 92}, {"Charlie", 78}}; cout << "Before sorting:" << endl; for (const auto &student : students) { cout << student.name << ": " << student.score << endl; } // 调用 sort 进行排序 sort(students.begin(), students.end(), compareByScore); cout << "\nAfter sorting by descending scores:" << endl; for (const auto &student : students) { cout << student.name << ": " << student.score << endl; } return 0; } ``` 此代码片段展示了如何创建一个简单的结构体存储学生姓名及其对应的考试成绩,并通过自定义比较器完成对学生记录按照成绩高低的排序[^4]。 #### 手动实现快速排序 除了调用现有的库函数外,还可以手动实现经典的快速排序算法来进行成绩排序。这种方法有助于深入理解排序机制并提高编码能力[^1]。 ```cpp void quickSort(vector<int>& arr, int low, int high) { if (low >= high) return; int pivot = arr[(low + high) / 2]; int i = low - 1, j = high + 1; while (true){ do{ ++i; }while(arr[i]<pivot); do{ --j; }while(arr[j]>pivot); if(i>=j) break; swap(arr[i],arr[j]); } quickSort(arr,low,j); quickSort(arr,j+1,high); } int main(){ vector<int> grades={85, 92, 78}; quickSort(grades,0,grades.size()-1); cout<<"Sorted Grades:"<<endl; for(auto grade:grades){ cout<<grade<<"\t"; } return 0; } ``` 这段代码实现了基本的快速排序逻辑,适用于处理较小规模的数据集或者学习目的下的实践练习[^1]。 #### 性能考量与优化建议 当面对较大的数据量时,应优先考虑时间复杂度较低的方法如快速排序(O(n log n))而非简单但效率低下的冒泡排序(O())[^5]。此外,在实际应用中推荐充分利用现代编译器和运行环境所提供的高度优化版本的标准库组件,它们往往经过精心设计能够适应多种场景达到最佳性能表现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值