7个WA求助(输入输出案例和题目一样)

P1093 [NOIP2007 普及组] 奖学金

cwh1769 @ 2020-09-10 21:17:14

#include<iostream>
using namespace std;
struct stu
{
    bool t;
    int num;
    int sum;
    int score1,score2,score3;
};
void fun(stu *a,int n)
{
    for(int j=0;j<5;j++)
    {
    int max=0;
    int i=0;
    while(i<=n)
    {
        if(a[i].sum>a[max].sum&&a[i].t!=0)
        {
            max=i;i++;
        }
        else if(a[i].sum==a[max].sum&&a[i].score1>a[max].score1&&a[i].t!=0)
        {
            max=i;i++;
        }
        else if(a[i].sum==a[max].sum&&a[i].score1==a[max].score1&&a[i].num<a[max].num&&a[i].t!=0)
        {
            max=i;i++;
        }
        else
            i++;
    }
    cout<<a[max].num<<" "<<a[max].sum<<endl;
    a[max].t=0;
    }
}
int main()
{
    stu a[300];
    int n;
    cin>>n;
    a[0].sum=0;
    for(int i=1;i<=n;i++)
    {
        a[i].num=i;
        cin>>a[i].score1>>a[i].score2>>a[i].score3;
        a[i].sum=a[i].score1+a[i].score2+a[i].score3;
    }
    fun(a,n);
    return 0;
}

by metaphysis @ 2020-09-11 10:53:14

@曹不二1769

Hack数据:

5
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

您的输出:

0 0
0 0
0 0
0 0
0 0

by cwh1769 @ 2020-09-11 15:17:45

5
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
1 0
2 0
3 0
4 0
5 0
Press any key to continue
为什么我运行的是这个?我是新手

@metaphysis


by metaphysis @ 2020-09-11 16:02:35

@曹不二1769

我用的是洛谷的IDE进行的测试,为了验证,使用本地的GCC 5.3进行了复核,仍然输出:

0 0
0 0
0 0
0 0
0 0

确定是您的代码有问题,您再检查一下您的代码逻辑。您用的是什么编译环境呢?


by cwh1769 @ 2020-09-11 16:35:22

您好,我用的编译器是VC6.0。还没尝试用其他的

@metaphysis


by metaphysis @ 2020-09-11 17:08:28

@曹不二1769

您会对结构体进行排序么?就是在结构体内写排序函数,然后直接按排序函数对结构体进行排序的方法?


by metaphysis @ 2020-09-11 18:09:33

@曹不二1769

按您的解题逻辑进行了修改,已Accepted,您看看差别。

#include<iostream>
using namespace std;
struct stu
{
    bool t;
    int num;
    int sum;
    int score1, score2, score3;
} a[300];

int n;
void fun()
{
    int cnt = 0;
    while (true)
    {
        int max_score = -1, max_score_idx = 1000;
        for (int i = 1; i <= n; i++)
        {
            if (a[i].t)
                continue;
            if (a[i].sum > max_score || (a[i].sum == max_score
                    && a[i].score1 > a[max_score_idx].score1) || a[i].sum == max_score
                && a[i].score1 == a[max_score_idx].score1 && a[i].num < max_score_idx)
            {
                max_score = a[i].sum;
                max_score_idx = a[i].num;
            }
        }
        if (max_score_idx != 1000)
        {
            a[max_score_idx].t = 1;
            cout << max_score_idx << " " << max_score << endl;
            cnt++;
        }
        else
            break;
        if (cnt == 5)
            break;
    }
}

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        a[i].num = i;
        cin >> a[i].score1 >> a[i].score2 >> a[i].score3;
        a[i].sum = a[i].score1 + a[i].score2 + a[i].score3;
    }
    fun();
    return 0;
}

有空请您访问我的 CSDN博客,里面有我写的一本书,内有编程竞赛相关内容的介绍,并附有对应的练习题目(题目源自UVa OJ),可免费下载此书的PDF版本:《C++,挑战编程——程序设计竞赛进阶训练指南》,感谢!


by cwh1769 @ 2020-09-12 09:52:56

@metaphysis ```cpp 您的思路很清晰,CSDN已关注,以后多向大佬学习学习。


|