本人高二党,在本站(大佬云集)搜索CCF NOI 1042的题解时
传送门http://oj.noi.cn/oj/#main/show/1042
大部分都采用的是结构体+指针的解法
虽然运行时间也是在0ms
但是会大大增大运行空间
如果程序有什么不足或者有更优算法
请多多包涵新人=-=(不会术语)
莫名其妙的思路:
1.结构体玩不明白!
2.可以用x方向储存学号,y方向1,2,3储存语文,数学,英语,4的话算一下总分(这是数据输入部分)
3.排序的话就是小心机喽,其实就是正常排序,但是只排序有用的部分,按照总分,语文成绩和学号来排,交换的时候交换三个有用的部分就行咯
C语言
#include<stdio.h>
int main()
{
int n,j,i,tem;
scanf("%d",&n);
int s[n][5];
for(j = 0;j<n;j++)
scanf("%d %d %d",&s[j][1],&s[j][2],&s[j][3]),s[j][0] = j+1,s[j][4] = s[j][1]+s[j][2]+s[j][3];
for(j = 0;j<n;j++)
for(i = 0;i<n-1;i++)
{
if(s[i][4]<s[i+1][4])
{
tem = s[i][4];
s[i][4] = s[i+1][4];
s[i+1][4] = tem;
tem = s[i][1];
s[i][1] = s[i+1][1];
s[i+1][1] = tem;
tem = s[i][0];
s[i][0] = s[i+1][0];
s[i+1][0] = tem;
}
if(s[i][4]==s[i+1][4]&&s[i][1]<s[i+1][1])
{
tem = s[i][4];
s[i][4] = s[i+1][4];
s[i+1][4] = tem;
tem = s[i][1];
s[i][1] = s[i+1][1];
s[i+1][1] = tem;
tem = s[i][0];
s[i][0] = s[i+1][0];
s[i+1][0] = tem;
}
}
j = 0;
while(j<5)
printf("%d %d\n",s[j][0],s[j][4]),j++;
return 0;
}