鱼C论坛

 找回密码
 立即注册
查看: 2024|回复: 2

[已解决]这个题怎么做啊

[复制链接]
发表于 2023-10-27 20:44:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述
一年一度的江苏省小学生程序设计比赛开始了,组委会公布了所有学生的成绩,成绩按分数从高到底排名,成绩相同按年级从低到高排。现在主办单位想知道每一个排名的学生前,有几位学生的年级低于他。

输入描述
第 1 行只有一个正整数 n
(1≤n≤200
),表示参赛的学生人数。

第 2∼n+1
行,每行有两个正整数 s
(0≤s≤400
)和 g
(1≤g≤6
),之间用一个空格隔开,其中第 i+1
行的第一个数 s
表示第 i
个学生的成绩,第 i+1
行的第二个数 g
表示第 i
个学生的年级。

输出描述
输出 n
行,每行只有一个正整数,其中第 i
行的数 k
表示排第 i
名的学生前面有 k
个学生排名比他高,且年级比他低。
最佳答案
2023-10-27 20:45:23
这个题目的要求是计算每个学生前面有几位学生的年级低于他。我们可以按照以下步骤解决这个问题:

1. 首先,我们需要读取输入数据。第一行是一个正整数n,表示参赛的学生人数。接下来的n行,每行有两个正整数s和g,表示学生的成绩和年级。

2. 然后,我们可以创建一个二维数组students来存储每个学生的成绩和年级。students[ i][0]表示第i个学生的成绩,students[ i][1]表示第i个学生的年级。

3. 接下来,我们可以对students数组进行排序。首先按照成绩从高到低排序,如果成绩相同则按照年级从低到高排序。这可以使用Python内置的sorted函数,并使用lambda函数作为排序的key。

  
  1.    students = sorted(students, key=lambda x: (-x[0], x[1]))
  2.    
复制代码


4. 然后,我们可以创建一个空的结果数组result,用来存储每个学生前面有几位学生的年级低于他。

5. 接下来,我们可以遍历排序后的students数组,计算每个学生前面有几位学生的年级低于他。对于第i个学生,我们可以遍历前i个学生,如果前面的学生的年级比他低,就增加计数器count。

  
  1.    result = []
  2.    for i in range(n):
  3.        count = 0
  4.        for j in range(i):
  5.            if students[j][1] < students[ i][1]:
  6.                count += 1
  7.        result.append(count)
  8.    
复制代码


6. 最后,我们可以输出结果数组result。

  
  1.    for count in result:
  2.        print(count)
  3.    
复制代码


完整的代码如下:

  1. n = int(input())
  2. students = []
  3. for _ in range(n):
  4.     s, g = map(int, input().split())
  5.     students.append([s, g])

  6. students = sorted(students, key=lambda x: (-x[0], x[1]))

  7. result = []
  8. for i in range(n):
  9.     count = 0
  10.     for j in range(i):
  11.         if students[j][1] < students[ i][1]:
  12.             count += 1
  13.     result.append(count)

  14. for count in result:
  15.     print(count)
复制代码


希望能帮到你!如果有任何问题,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-27 20:45:23 | 显示全部楼层    本楼为最佳答案   
这个题目的要求是计算每个学生前面有几位学生的年级低于他。我们可以按照以下步骤解决这个问题:

1. 首先,我们需要读取输入数据。第一行是一个正整数n,表示参赛的学生人数。接下来的n行,每行有两个正整数s和g,表示学生的成绩和年级。

2. 然后,我们可以创建一个二维数组students来存储每个学生的成绩和年级。students[ i][0]表示第i个学生的成绩,students[ i][1]表示第i个学生的年级。

3. 接下来,我们可以对students数组进行排序。首先按照成绩从高到低排序,如果成绩相同则按照年级从低到高排序。这可以使用Python内置的sorted函数,并使用lambda函数作为排序的key。

  
  1.    students = sorted(students, key=lambda x: (-x[0], x[1]))
  2.    
复制代码


4. 然后,我们可以创建一个空的结果数组result,用来存储每个学生前面有几位学生的年级低于他。

5. 接下来,我们可以遍历排序后的students数组,计算每个学生前面有几位学生的年级低于他。对于第i个学生,我们可以遍历前i个学生,如果前面的学生的年级比他低,就增加计数器count。

  
  1.    result = []
  2.    for i in range(n):
  3.        count = 0
  4.        for j in range(i):
  5.            if students[j][1] < students[ i][1]:
  6.                count += 1
  7.        result.append(count)
  8.    
复制代码


6. 最后,我们可以输出结果数组result。

  
  1.    for count in result:
  2.        print(count)
  3.    
复制代码


完整的代码如下:

  1. n = int(input())
  2. students = []
  3. for _ in range(n):
  4.     s, g = map(int, input().split())
  5.     students.append([s, g])

  6. students = sorted(students, key=lambda x: (-x[0], x[1]))

  7. result = []
  8. for i in range(n):
  9.     count = 0
  10.     for j in range(i):
  11.         if students[j][1] < students[ i][1]:
  12.             count += 1
  13.     result.append(count)

  14. for count in result:
  15.     print(count)
复制代码


希望能帮到你!如果有任何问题,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-27 20:45:37 | 显示全部楼层
你可以使用C或C++编写程序来解决这个问题。以下是一个可能的解决方案:
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. struct Student {
  5.     int score;
  6.     int grade;
  7. };
  8. bool compareStudents(const Student& s1, const Student& s2) {
  9.     if (s1.score == s2.score) {
  10.         return s1.grade < s2.grade;
  11.     }
  12.     return s1.score > s2.score;
  13. }
  14. int main() {
  15.     int n;
  16.     std::cin >> n;
  17.     std::vector<Student> students(n);
  18.     for (int i = 0; i < n; ++i) {
  19.         std::cin >> students[i].score >> students[i].grade;
  20.     }
  21.     std::sort(students.begin(), students.end(), compareStudents);
  22.     std::vector<int> numLowerGrades(n);
  23.     for (int i = 0; i < n; ++i) {
  24.         int count = 0;
  25.         for (int j = 0; j < i; ++j) {
  26.             if (students[j].grade < students[i].grade) {
  27.                 count++;
  28.             }
  29.         }
  30.         numLowerGrades[i] = count;
  31.     }
  32.     for (int i = 0; i < n; ++i) {
  33.         std::cout << numLowerGrades[i] << std::endl;
  34.     }
  35.     return 0;
  36. }
复制代码

该程序首先读取学生的数量n,然后读取每个学生的成绩和年级。接下来,它使用自定义的比较函数按照成绩从高到低、年级从低到高的顺序对学生进行排序。然后,它计算每个学生前面有多少位成绩更高且年级更低的学生,并将结果存储在一个向量中。最后,它输出这个向量中的所有元素。

希望这可以帮助你解决问题!

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 00:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表