题目描述:
小兔子有n个果园,果园里有许多果树,有苹果树,芒果树,香蕉树,李子树,无花果树。
终于到了丰收的季节,小兔子从每个果园采了许多的水果,现在小兔子想给每个果园的产量排序。
因为小兔子爱吃芒果,所以按芒果的数量从大到小排序,如果芒果的数量相同,那就按照其他水果的总数量从小到大排序。
不会存在芒果数量相同且其他水果的总数量相同的情况。
输入:
第一行输入一个n,代表n个果园(1<=n<=10)
接下来n行,每行五个数,分别代表小兔子从果园里采摘的苹果数量,芒果数量,香蕉数量,李子数量,无花果数量
每个水果的数量不超过10,且没有负数。
输出:
输出n个果园产量排序后的结果
完整代码:
#include "stdio.h" //程序思路:按题目要求选出最多芒果,如一样则比其他水果数量,依次储存b数组并给其赋0避免再次参与判断
main(){
int n,a[20][10]={0},b[20][10]={0},i,j,max,sum1,sum2,h,x=0,t;
scanf("%d",&n); //输入果园数
for(i=0;i<n;i++)
for(j=0;j<5;j++) //输入所有水果数量
scanf("%d",&a[i][j]);
for(t=0;t<n;t++)
{
max=a[0][1]; //令第一果园芒果数为最大
h=0; //h为其下标
for(i=1;i<n;i++)
{
if(a[i][1]>max) //有比其大则为大
{
max=a[i][1];
h=i;
}
if(a[i][1]==max) //同大则判断其它水果
{ if(a[i][1]==0) // a[i][1]为零则参与过运算直接跳过(因为最大不可能为0所以当 a[0][1]为0时最大值一定不为 a[0][1]所以不用特判初始为0的情况)
continue;
sum1=0; //清零
sum2=0;
for(j=0;j<5;j++) //累加当前最大芒果其他水果数
sum1+=a[h][j];
sum1-=a[h][1];
for(j=0;j<5;j++)
sum2+=a[i][j]; //累加同数量芒果其他水果数
sum2-=a[i][1];
if(sum1>sum2) //判断其他水果数量
{
max=a[i][1];
h=i;
}
}
}
for(j=0;j<5;j++) //将最大水果数赋值b数组
b[x][j]=a[h][j];
x++;
for(j=0;j<5;j++) //归零不重复判断
a[h][j]=0;
}
for(i=0;i<n;i++) //输出
{
for(j=0;j<5;j++)
printf("%d ",b[i][j]);
printf("\n");
}
}