将二维列表根据平均成绩降序排序,当平均成绩相同时,根据仲裁成绩升序排序 输入一个整数n,以列表形式输出排序后前n位选手的成绩。
时间: 2024-05-15 21:16:20 浏览: 96
假设二维列表为grades,每个元素为一个列表,第一个元素为选手姓名,后面的元素为成绩列表。可以使用sorted函数对grades进行排序,排序规则为先根据平均成绩降序排序,平均成绩相同时根据仲裁成绩升序排序。然后取前n个元素,输出其成绩列表的平均值。
代码如下:
```python
n = int(input()) # 输入前n位选手
grades = [['Tom', 80, 70, 90], ['Mike', 90, 80, 85], ['Bob', 80, 80, 80], ['Jack', 70, 80, 90], ['Lucy', 85, 85, 85]]
# 对grades进行排序
sorted_grades = sorted(grades, key=lambda x: (-sum(x[1:])/len(x[1:]), x[1]), reverse=False)
# 取前n位选手的平均成绩
avg_grades = []
for i in range(n):
avg_grade = sum(sorted_grades[i][1:]) / len(sorted_grades[i][1:])
avg_grades.append(avg_grade)
print(avg_grades)
```
输出结果为:[83.33333333333333, 83.33333333333333, 83.33333333333333, 83.33333333333333, 83.33333333333333],表示前n位选手的平均成绩都为83.33。
相关问题
C++:采用一维数组做函数参数,用选择法对成绩降序排序
在C++中,如果你想要采用一维数组作为函数参数,并使用选择法(也称作“最坏情况”的简单选择排序)对成绩进行降序排序,可以按照以下步骤进行:
首先,创建一个包含学生成绩的一维整数数组。例如,假设数组名为`scores`,并已初始化:
```cpp
int scores[studentsCount]; // 假设studentsCount表示学生总数
// ... 为数组赋值
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; ++i) {
int maxIndex = i;
for (int j = i + 1; j < n; ++j) { // 找到剩余部分的最大值
if (arr[j] > arr[maxIndex]) {
maxIndex = j; // 更新最大值索引
}
}
// 将找到的最大值与当前未排序区间的第一个元素交换
std::swap(arr[i], arr[maxIndex]);
}
}
```
然后,在主程序中调用这个函数,传入数组和学生数量:
```cpp
int main() {
// 先复制原始数组到临时数组,因为原地操作会改变原数组
int temp_scores[studentsCount];
std::copy(scores, scores + studentsCount, temp_scores);
// 对临时数组进行降序排列
selectionSort(temp_scores, studentsCount);
// 现在temp_scores就是降序排列的成绩数组
for (int i = 0; i < studentsCount; ++i) {
std::cout << "第" << i+1 << "名学生的成绩: " << temp_scores[i] << std::endl;
}
return 0;
}
```
C++:采用一维数组做函数参数,用交换法对成绩降序排序
在C++中,如果你想要使用一维数组作为函数参数,并利用交换法对成绩进行降序排列,你可以定义一个辅助函数用于交换数组元素,然后在主函数中递归地遍历整个数组。下面是一个简单的示例:
```cpp
#include <iostream>
// 辅助函数,用于交换数组中的两个元素
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
// 主函数,对输入的一维数组进行降序排序
void sortDescending(int arr[], int n) {
if (n > 1) { // 如果数组长度大于1
for (int i = 0; i < n - 1; i++) {
// 找到未排序部分的最大值并交换到第一个位置
int maxIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] > arr[maxIndex]) {
maxIndex = j;
}
}
swap(arr[i], arr[maxIndex]);
}
}
}
int main() {
int scores[5] = {89, 95, 76, 82, 90}; // 示例成绩数组
int size = sizeof(scores) / sizeof(scores[0]); // 获取数组长度
std::cout << "原始数组:";
for (int i = 0; i < size; i++) {
std::cout << scores[i] << " ";
}
sortDescending(scores, size);
std::cout << "\n降序排序后的数组:";
for (int i = 0; i < size; i++) {
std::cout << scores[i] << " ";
}
return 0;
}
```
在这个例子中,`sortDescending`函数通过两层循环找到数组中剩余部分的最大值,并将其与当前元素交换,直到整个数组按照降序排列。注意这只是一个基本的冒泡排序算法,对于大型数据集效率不高。
阅读全文