输入n个学生的姓名及其3门功课成绩(整数),要求根据3门功课的平均成绩从高分到低分输出每个学生的姓名、3门功课成绩及平均成绩,若平均分相同则按姓名的字典序输出。 输入格式: 测试数据有多组,处理到文件尾。每
时间: 2023-12-17 11:04:39 浏览: 110
组测试数据的第一行为一个整数n(1<=n<=1000),表示学生数。接下来n行,每行包括一个字符串和三个整数,分别表示一个学生的姓名和三门功课的成绩,中间用空格隔开。输出格式: 对于每组测试数据,按照要求输出排序后的学生信息。每个学生的信息占一行,格式为:姓名 成绩1 成绩2 成绩3 平均成绩。其中,成绩1、成绩2、成绩3均为整数,平均成绩保留一位小数。每组测试数据输出完毕后,输出一个空行。
样例输入:
3
Tom 80 90 70
Jerry 90 60 80
Jack 80 80 80
4
Lucy 88 85 90
Lily 90 92 80
Lucas 88 85 90
Lisa 90 92 80
样例输出:
Jerry 90 60 80 76.7
Jack 80 80 80 80.0
Tom 80 90 70 80.0
Lily 90 92 80 87.3
Lisa 90 92 80 87.3
Lucas 88 85 90 87.7
Lucy 88 85 90 87.7
提示:
可以使用结构体来存储每个学生的信息,然后使用 sort 函数进行排序。
相关问题
输入n个学生的姓名及其3门功课成绩(整数),要求根据3门功课的平均成绩从高分到低分输出每个学生的姓名、3门功课成绩及平均成绩,若平均分相同则按姓名的字典序输出。
### 回答1:
可以使用 Python 来实现这个需求。首先,需要输入 n 个学生的姓名、3 门功课成绩。可以使用一个字典来存储每个学生的姓名、3 门功课成绩及平均成绩。然后,可以使用 Python 的内置函数 sorted 来根据平均成绩从高分到低分排序,并在 key 参数中指定平均成绩为排序关键字。如果平均分相同,可以在 key 参数中指定姓名为次要关键字。最后,可以遍历字典并输出每个学生的姓名、3 门功课成绩及平均成绩。
### 回答2:
本题需要实现对n个学生的成绩进行排序,并将排序后的结果以一定规则输出。首先,在输入时需要用一个二维数组存储每个学生的姓名及其3门功课成绩。每个学生的成绩需要求出平均分,并将其存储到二维数组中。然后,使用一个排序算法对学生的成绩按照平均分进行排序。最后,按照题目要求将每个学生的姓名、3门功课成绩及平均成绩输出。
具体实现方法如下:
1.使用一个二维数组score[][]存储每个学生的姓名及其3门功课成绩。输入时使用for循环逐个输入每个学生的信息:
```
for(int i=0;i<n;i++){
cin>>score[i][0]>>score[i][1]>>score[i][2]>>score[i][3];
}
```
其中score[i][0]表示第i个学生的姓名,score[i][1]、score[i][2]、score[i][3]分别表示其3门功课的成绩。
2.计算每个学生的平均分并将其存储到score[i][4]中。平均分的计算方式为:score[i][4]=(score[i][1]+score[i][2]+score[i][3])/3.0
```
for(int i=0;i<n;i++){
score[i][4]=(score[i][1]+score[i][2]+score[i][3])/3.0;
}
```
3.使用冒泡排序或选择排序算法对学生的成绩按照平均分进行排序。排序时需要注意,如果平均分相同,则按照姓名的字典序进行排序。
```
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(score[i][4]<score[j][4]){//比较平均分
//交换两个学生的信息
for(int k=0;k<5;k++){
int temp=score[i][k];
score[i][k]=score[j][k];
score[j][k]=temp;
}
}else if(score[i][4]==score[j][4] && score[i][0]>score[j][0]){//平均分相同,比较姓名
//交换两个学生的信息
for(int k=0;k<5;k++){
int temp=score[i][k];
score[i][k]=score[j][k];
score[j][k]=temp;
}
}
}
}
```
4.按照题目要求输出每个学生的信息。使用for循环逐个输出排序后的学生信息。
```
for(int i=0;i<n;i++){
cout<<score[i][0]<<" "<<score[i][1]<<" "<<score[i][2]<<" "<<score[i][3]<<" "<<score[i][4]<<endl;
}
```
以上就是对本题实现的详细说明。这道题考查了对数组、循环以及排序算法的掌握程度,需要多加理解和练习。同时,也需要注意输入和输出的格式,符合题目要求。
### 回答3:
这道题目可以用Python的字典和列表来实现。
1. 首先用一个字典来存储每个学生的姓名和3门功课成绩:
```python
students = {}
n = int(input("请输入学生个数:"))
for i in range(n):
name = input("请输入第{}个学生的姓名:".format(i+1))
score1, score2, score3 = map(int, input("请输入{}的3门功课成绩(用空格分隔):".format(name)).split())
students[name] = [score1, score2, score3]
```
2. 然后计算每个学生的平均成绩,并把他们存储到另外一个字典中:
```python
averages = {}
for name, scores in students.items():
average = sum(scores) / 3
averages[name] = average
```
3. 对于平均成绩相同的学生,比较他们的姓名,把他们排序:
```python
sorted_names = sorted(averages.keys(), key=lambda x: (-averages[x], x))
```
这里用到了sorted函数的key参数,key=lambda x: (-averages[x], x)表示首先按照平均成绩降序排序,如果平均成绩相同,则按照姓名升序排序。
4. 输出每个学生的姓名、3门功课成绩及平均成绩:
```python
for name in sorted_names:
scores = students[name]
average = averages[name]
print("{}: {}, {}, {}, 平均成绩:{:.2f}".format(name, scores[0], scores[1], scores[2], average))
```
完整代码如下:
```python
students = {}
n = int(input("请输入学生个数:"))
for i in range(n):
name = input("请输入第{}个学生的姓名:".format(i+1))
score1, score2, score3 = map(int, input("请输入{}的3门功课成绩(用空格分隔):".format(name)).split())
students[name] = [score1, score2, score3]
averages = {}
for name, scores in students.items():
average = sum(scores) / 3
averages[name] = average
sorted_names = sorted(averages.keys(), key=lambda x: (-averages[x], x))
for name in sorted_names:
scores = students[name]
average = averages[name]
print("{}: {}, {}, {}, 平均成绩:{:.2f}".format(name, scores[0], scores[1], scores[2], average))
```
运行示例:
```
请输入学生个数:3
请输入第1个学生的姓名:小明
请输入小明的3门功课成绩(用空格分隔):80 90 70
请输入第2个学生的姓名:小红
请输入小红的3门功课成绩(用空格分隔):90 80 70
请输入第3个学生的姓名:小刚
请输入小刚的3门功课成绩(用空格分隔):80 70 90
小红: 90, 80, 70, 平均成绩:80.00
小明: 80, 90, 70, 平均成绩:80.00
小刚: 80, 70, 90, 平均成绩:80.00
```
可以看到,按照平均成绩从高到低排序,如果平均成绩相同则按照姓名从小到大排序。
输入n个学生的姓名及其3门功课成绩(整数),要求根据3门功课的平均成绩从高分到低分输出每个学生的姓名、3门功课成绩及平均成绩,若平均分相同则按姓名的字典序输出。c语言
下面是一个简单的C语言代码实现,使用结构体存储学生信息,排序时使用快速排序算法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 1000
struct student {
char name[20];
int score[3];
double avg;
};
int cmp(const void* a, const void* b) {
struct student* s1 = (struct student*)a;
struct student* s2 = (struct student*)b;
if (s1->avg != s2->avg) {
return s2->avg - s1->avg > 0 ? 1 : -1;
} else {
return strcmp(s1->name, s2->name);
}
}
int main() {
int n;
struct student stu[MAX_N];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", stu[i].name);
scanf("%d%d%d", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
stu[i].avg = (double)(stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3;
}
qsort(stu, n, sizeof(struct student), cmp);
for (int i = 0; i < n; i++) {
printf("%s %d %d %d %.2lf\n", stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg);
}
return 0;
}
```
输入格式为:
```
n
name1 score11 score12 score13
name2 score21 score22 score23
...
```
其中n为学生总数,name为学生姓名,score1、score2、score3为3门功课成绩。输出格式为:
```
name1 score11 score12 score13 avg1
name2 score21 score22 score23 avg2
...
```
其中avg为3门功课的平均分。
阅读全文