问题 H: 小兔子的果园

本文介绍了一个C语言程序,用于解决小兔子果园水果产量排序问题,按芒果数量从大到小,芒果相同则按其他水果总量从小到大排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小兔子有n个果园,果园里有许多果树,有苹果树,芒果树,香蕉树,李子树,无花果树。
终于到了丰收的季节,小兔子从每个果园采了许多的水果,现在小兔子想给每个果园的产量排序。
因为小兔子爱吃芒果,所以按芒果的数量从大到小排序,如果芒果的数量相同,那就按照其他水果的总数量从小到大排序。
不会存在芒果数量相同且其他水果的总数量相同的情况。

输入

第一行输入一个n,代表n个果园(1<=n<=10)
接下来n行,每行五个数,分别代表小兔子从果园里采摘的苹果数量,芒果数量,香蕉数量,李子数量,无花果数量
每个水果的数量不超过10,且没有负数。

输出

输出n个果园产量排序后的结果

样例输入 复制
5
1 2 3 4 5
1 3 3 4 5
1 4 2 2 2
1 1 1 1 1
1 4 1 1 1
样例输出 复制
1 4 1 1 1
1 4 2 2 2
1 3 3 4 5
1 2 3 4 5
1 1 1 1 1

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int** arr1 = (int**)malloc(sizeof(int*) * (n + 1));
    int* arr2 = (int*)malloc(sizeof(int) * (n + 1));
    for (int i = 0; i < n; i++)
    {
        arr2[i] = 0;
    }
    for (int i = 0; i < n; i++)
    {
        arr1[i] = (int*)malloc(sizeof(int) * 6);
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            scanf("%d", &arr1[i][j]);
        }
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if (j != 1)
            {
                arr2[i] += arr1[i][j];
            }
        }
    }
    for (int j = 0; j < n; j++)
    {
        int max = j;
        int v = j;
        for (int i = j+1; i < n; i++)
        {
            
            if (arr1[max][1] < arr1[i][1])
            {
                max = i;
            }
            if ((arr1[max][1] == arr1[i][1]) && (arr2[max] > arr2[i]))
            {
                max = i;
            }
        }
        for (int i = 0; i < 5; i++)
        {
            int tmp = arr1[max][i];
            arr1[max][i] = arr1[v][i];
            arr1[v][i] = tmp;
        }
    }
    printf("\n");
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            printf("%d ", arr1[i][j]);
        }
        printf("\n");
    }
    for (int i = 0; i < n; i++)
    {
        free(arr1[i]);
    }
    free(arr1);
    free(arr2);
    return 0;
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值