解题思路:
注意事项:
参考代码:
#include<stdio.h>
void put_number(int n);//输入参数
void sort(int (*sum)[2],int (*grade)[3],int);//排序
void change(int *x1,int *x2,int *,int *); //交换
/******************************************/
int main ()
{
int n;
scanf("%d",&n);
put_number(n);
return 0;
}
/*****************输入参数*************************/
void put_number(int n)
{
int grade[n][3];
int sumgrade[n][2];
for (int i=0;i<n;i++){
scanf("%d %d %d",&grade[i][0],&grade[i][1],&grade[i][2]);
sumgrade[i][0]=grade[i][0]+grade[i][1]+grade[i][2];
sumgrade[i][1]=i+1;
}
sort(sumgrade,grade,n);
}
/******************排序************************/
//会出现两类排序,第一类比成绩,第二类各科成绩
void sort(int (*sum)[2],int (*grade)[3],int n)
{
for(int i=0;i<n;i++) //冒泡排序
{
for (int j=0;j<n;j++)
{
if(sum[i][0]>sum[j][0]) //比较总成绩
{
change(grade[i],grade[j],sum[i],sum[j]);
}
else if(sum[i][0]==sum[j][0])//总成绩同
{
if(grade[i][0]>grade[j][0])//比较语文成绩
{
change(grade[i],grade[j],sum[i],sum[j]);
}
else if(grade[i][0]==grade[j][0])//语文成绩同
{
if(sum[i][1]<sum[j][1]) //比较学号
change(grade[i],grade[j],sum[i],sum[j]);
}
}
}
}
if(n>=5) //多于5人,取前五名
for(int i=0;i<5;i++)
printf("%d %d\n",sum[i][1],sum[i][0]);
else //少于五人,每人都有奖
for(int i=0;i<n;i++)
printf("%d %d\n",sum[i][1],sum[i][0]);
}
/******************交换************************/
void change(int *x1,int *x2,int *sum,int *sum1)
{
int c; //中间量
for (int k=0;k<3;k++)//交换各科成绩
{
c=x1[k];
x1[k]=x2[k];
x2[k]=c;
}
for(int k=0;k<2;k++) //交换总成绩,及学号
{
c=sum[k];
sum[k]=sum1[k];
sum1[k]=c; }
}
0.0分
1 人评分
C语言训练-排序问题<1> (C语言代码)浏览:600 |
淘淘的名单 (C语言代码)浏览:1101 |
WU-蓝桥杯算法提高VIP-Quadratic Equation (C++代码)浏览:1748 |
Wu-求圆的面积 (C++代码)浏览:1887 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:627 |
校门外的树 (C语言代码)浏览:694 |
DNA (C语言代码)浏览:540 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:551 |
图形输出 (C语言代码)浏览:1386 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:530 |