从品牌网站建设到网络营销策划,从策略到执行的一站式服务
记录一道排序问题的思考
网课终于结束了。
很多同学也回到学校上课了。
HZSjYJ决定对网课上的好的前五名的学校进行奖励和宣传。他们挑选了语文数学英语三门课,并对每个学校三门课进行了打分。
当然奖励排名规则如下:
1 三门课总分高的排在前面
2 总分相同,则语文高的排在前面
3 如果总分和语文都相同,则序号在前的排在前面(序号是JYJ事先定好的,就是输入顺序)
第一行输入一个整数n,表示学校数
然后是n行,每行3个数字,分别代表1个学校的语文数学英语的打分
输出5行,分别是排名前5的学校(按照排名输出),每行2个整数,为序号和总分
样例输入
6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
输出
6 265
4 264
3 258
2 244
1 237
分析这道题当然可以基于排序去做,写一个快排,然后改变其中排序的逻辑,但是这样做的话就要对整个输入的数组进行存储和排序,因为这里只要前几名的一个排序结果,所以不妨使用另外一种思路来解决这类问题
只存储前几名,每次只和前几名进行比较
#includeusing namespace std;
int main(){int n;
int tl[6]={0},ch[6]={0},ID[6]={0};
//freopen("in.in","r",stdin);
//freopen("out.out","w",stdout) ;
cin>>n;
for(int i=0;iint totals,x,y,z;
cin>>x>>y>>z;
tl[5]=x+y+z; ch[5]=x; ID[5]=i+1;
for(int j=4;j>=0;j--){ if(tl[j]<=tl[j+1]){ if(tl[j+1]>tl[j] ||(tl[j]==tl[j+1] && ch[j+1]>ch[j] ))
{int temp;
temp=tl[j];tl[j]=tl[j+1];tl[j+1]=temp;
temp=ch[j];ch[j]=ch[j+1];ch[j+1]=temp;
temp=ID[j];ID[j]=ID[j+1];ID[j+1]=temp;
}
}
else break;
}
}
for(int i=0;i<5;i++)
cout<
时间复杂度:O(n)
空间复杂度:O(1)
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图