题目二十四:身高、体重排序

身高从低到高
身高相同体重从轻到重
体重相同维持原来顺序
输入
4
100 100 120 130
40 30 60 50
输出:
2 1 3 4
输入
3
90 110 90
45 60 45
输出
1 3 2

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

typedef struct {
    int height;
    int weight;
} Person;

int Cmp(const void *a, const void *b)
{
    Person *p1 = (Person *)a;
    Person *p2 = (Person *)b;

    if (p1->height < p2->height) {
        return -1;
    } else if (p1->height == p2->height) {
        return (p1->weight - p2->weight);
    } else {
        return 1;
    }
}

int main()
{
    int i, n;
    Person *person = NULL;
    Person *personBak = NULL;
    char s[1000] = {0};

    scanf("%d", &n);

    person = malloc(sizeof(Person) * n);
    if (person == NULL) {
        printf("mallco error\n");
        return -1;
    }
    personBak = malloc(sizeof(Person) * n);
    if (personBak == NULL) {
        printf("mallco error\n");
        return -1;
    }

    memset(personBak, 0, sizeof(Person) * n);
    for (i = 0; i < n; i++) {
        scanf("%d", &person[i].height);
    }

    for (i = 0; i < n; i++) {
        scanf("%d", &person[i].weight);
    }

    int j;

    memcpy(personBak, person, sizeof(Person) * n);
    qsort(person, n, sizeof(Person), Cmp);

    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            if ((person[i].height == personBak[j].height) 
                    && (person[i].weight == personBak[j].weight)) {
                printf("%d ", j + 1);
                personBak[j].height=0;personBak[j].weight=0;
                break;
            }
        }
    }
    printf("\n");

    return 0;
}


版权声明:本文为weixin_48016432原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。