求助题目
  • 板块灌水区
  • 楼主CodeFarmer1949
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/12/10 21:36
  • 上次更新2023/10/26 23:52:00
查看原帖
求助题目
555339
CodeFarmer1949楼主2022/12/10 21:36

一些疑惑

题目是这样的

题目描述: 输入n个人的学号及成绩,按成绩从大到小输出每个人的学号及成绩,成绩相同的按照输入的先后顺序输出。

【输入】 输入第一行为一个整数,n,表示n个数。(1 ≤ n ≤ 100000) 输入第二行为空格隔开的n个整数,即每个人的学号。 输入第三行为空格隔开的n个整数,即每个人的成绩

(1 ≤ 每个整数 ≤ 1000000000,保证学号各不相同)

【输出】 输出一行,为空格隔开的n个正整数,即排好序后的每个人的学号

【输入样例1】 5 3 2 7 6 8 3 3 5 5 4

【输出样例1】 7 6 8 3 2

【输入样例2】 4 1 2 3 4 2 3 4 3

【输出样例2】 3 2 4 1 题目描述: 输入n个人的学号及成绩,按成绩从大到小输出每个人的学号及成绩,成绩相同的按照输入的先后顺序输出。

【输入】 输入第一行为一个整数,n,表示n个数。(1 ≤ n ≤ 100000) 输入第二行为空格隔开的n个整数,即每个人的学号。 输入第三行为空格隔开的n个整数,即每个人的成绩

(1 ≤ 每个整数 ≤ 1000000000,保证学号各不相同)

【输出】 输出一行,为空格隔开的n个正整数,即排好序后的每个人的学号

【输入样例1】 5 3 2 7 6 8 3 3 5 5 4

【输出样例1】 7 6 8 3 2

【输入样例2】 4 1 2 3 4 2 3 4 3

【输出样例2】 3 2 4 1

我的代码是这样的

#include <iostream>
using namespace std;
int n;
struct student
{
    int number, score;
};
student stu[100005],a[100005]; 
void gbpx(int l, int r)
{
    if (l==r)
        return;
    int mid = (l+r)/2;
    gbpx(l,mid);
    gbpx(mid+1,r);
    int al = l,ar = mid+1,aa = l;
    while(al <= mid and ar <= r)
    {
        if (stu[al].score >= stu[ar].score)
        {
            a[aa++] = stu[al++];
        }
        else
        {
            a[aa++] = stu[ar++];
        }
    }
    while(al <= mid)
    {
        a[aa++] = stu[al++];
    }
    while(ar <= r)
    {
        a[aa++] = stu[ar++];
    }
    for (int x = l;x <= r;x++)
    {
        stu[x] = a[x];
    }
}
int main()
{
    cin >> n;
    for (int x = 1;x <= n;x++)
    {
        cin >> stu[x].number >> stu[x].score;
    }
    gbpx(1,n);
    for (int x = 1;x <= n;x++)
    {
        cout << stu[x].number << " ";
    }    
    return 0;
}

求助原因

第一个输入样例代进去输出是这样的:

7 3 5 8 3

我就很奇怪,错就错吧,5这个数据哪里来的?

帮帮孩子吧,实在看不出来了,头都晕了

2022/12/10 21:36
加载中...