用C语言完成数组排序,并对最后一列数据按条件求和,且求和后输出需要的数据,具体任务如下:

排序前:
1 1 1 1.1
1 1 3 1.2
2 1 3 2.9
1 2 1 1.2
2 1 2 2.8
1 2 2 1.5
2 2 2 3.1
1 2 3 2.3
2 2 1 3.0
1 1 2 2.5
1 2 4 2.4
1 3 1 2.6
2 1 1 2.7
2 2 3 3.2

排序并计算后:
1 1 1 1.1 1.1
1 1 2 2.5 3.6
1 1 3 1.2 4.8
1 2 1 1.2 1.2
1 2 2 1.5 2.7
1 2 3 2.3 5.0
1 2 4 2.4 7.4
1 3 1 2.6 2.6
2 1 1 2.7 2.7
2 1 2 2.8 5.5
2 1 3 2.9 8.4
2 2 1 3.0 3.0
2 2 2 3.1 6.1
2 2 3 3.2 9.3

输出有效数据:
1 1 3 1.2 4.8
1 2 4 2.4 7.4
1 3 1 2.6 2.6
2 1 3 2.9 8.4
2 2 3 3.2 9.3

#include<stdio.h>
typedef struct list {
    int key[3] = {0};
    double date = 0;
    double sum = 0;
};
int judge(int a[], int b[]) {
    if (a[0] != b[0])
        return a[0] > b[0];
    else if (a[1] != b[1])
        return a[1] > b[1];
    else
        return a[2] > b[2];
}
int main(){
    int len = 14;
    list my[14], tmp;
    for (int i = 0; i < len; i++) {
        scanf("%d%d%d%lf", &my[i].key[0], &my[i].key[1], &my[i].key[2], &my[i].date);
    }
    for (int i = 0; i < len; i++) {
        for (int j = i + 1; j < len; j++) {
            if (judge(my[i].key, my[j].key)) {
                tmp = my[i];
                my[i] = my[j];
                my[j] = tmp;
            }
        }
    }
    my[0].sum = my[0].date;
    for (int i = 1; i < len; i++) {
        if (i!=0&&my[i].key[0] == my[i - 1].key[0] && my[i].key[1] == my[i - 1].key[1] ) 
            my[i].sum = my[i - 1].sum + my[i].date;
        else 
            my[i].sum = my[i].date;
    }
    for (int i = 0; i < len; i++) 
        printf("%d %d %d %0.1lf %0.1lf\n", my[i].key[0], my[i].key[1], my[i].key[2], my[i].date, my[i].sum);
    return 0;
}