自由の宠儿、 @ 2018-10-05 20:32:59
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{
long long n,temp;
cin>>n;
int a[n],b[n],c[n];
for(int i=0;i<n;i++)
{
cin>>a[i]>>b[i]>>c[i];
}
int s[n];
for(int i=0;i<n;i++)
{
s[i]=a[i]+b[i]+c[i];
}
int f[n];
for(int i=0;i<n;i++)
{
f[i]=i+1;
}
for(int j=0;j<n;j++)
{
for(int i=0;i<n-1;i++)
{
if(s[i]<s[i+1])
{
temp=s[i];
s[i]=s[i+1];
s[i+1]=temp;
temp=f[i];
f[i]=f[i+1];
f[i+1]=temp;
}
}
}
for(int i=0;i<5;i++)
{
cout<<f[i]<<" "<<s[i]<<endl;
}
return 0;
}
by 自由の宠儿、 @ 2018-10-05 20:34:05
我的思路是定义数组为学号,定义数组为总成绩,然后冒泡一一排序,最后输出..
by 霹雳搅屎棍 @ 2018-10-05 20:35:07
@自由の宠儿、 WTF?
by 霹雳搅屎棍 @ 2018-10-05 20:35:39
@自由の宠儿、 这不是道纯模拟吗……
by 霹雳搅屎棍 @ 2018-10-05 20:36:09
我的AC代码,可以参考一下
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct student{
int num;
int chn;
int tot;
}stu[1008];
inline bool cmp(student a,student b){
if(a.tot!=b.tot)
return a.tot>b.tot;
if(a.chn!=b.chn)
return a.chn>b.chn;
return a.num<b.num;
}
int n;
int main(int argc, char** argv) {
scanf("%d",&n);
for(int i=1,math,eng;i<=n;i++){
scanf("%d%d%d",&stu[i].chn,&math,&eng);
stu[i].num=i;
stu[i].tot=stu[i].chn+math+eng;
}
sort(stu+1,stu+n+1,cmp);
if(n<5)
for(int i=1;i<=n;i++)
printf("%d %d\n",stu[i].num,stu[i].tot);
else
for(int i=1;i<=5;i++)
printf("%d %d\n",stu[i].num,stu[i].tot);
return 0;
}
by 霹雳搅屎棍 @ 2018-10-05 20:36:51
@自由の宠儿、 问题之一是在main()里开数组,所以爆栈
by 霹雳搅屎棍 @ 2018-10-05 20:38:23
@自由の宠儿、 思路没啥问题吧……
by 自由の宠儿、 @ 2018-10-05 20:40:40
@霹雳搅屎棍 谢谢..
by 霹雳搅屎棍 @ 2018-10-06 07:49:25
@自由の宠儿、 emm
没事
by Lance1ot @ 2018-10-18 19:25:06
吓死
以为一个人在自言自语呢