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已关注,以后多向大佬学习学习。