小 I 的小姐姐(结构体) SDUT

版权声明:本人原创文章若需转载请标明出处和作者!沙 https://blog.csdn.net/weixin_44143702/article/details/87923789

小 I 的小姐姐

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

小 I 去天津玩啦,一路上,他跟他的同学发生了许多有趣的事。

当他们路过天津外国语学院时,他发现了许多小姐姐,他眼花缭乱,甚至不知道该去找哪个小姐姐聊天。

怎么办怎么办!

于是他想到了你,他拍了一张照片给你,你发现照片里一共有 n 个小姐姐(序号从 0 到 n - 1),每个小姐姐都有自己的风格,可以按特征划分出 3 个特征值  w1 , w2 , w3 ,你知道小 I 特别喜欢 w1 特征值高的小姐姐,不太看重 w3 ,于是你对于每个特征都赋予一个权重,分别对应为0.7 0.2 0.1,你能帮小 I 找出来他发来的这张照片里他最喜欢的小姐姐吗?

Input

多组输入,对于每组输入:

  • 第一行给出 n (n <= 5000) ,之后有 n 行数。
  • 每行数有三个数 w1, w2, w3,表示三个特征值。

所有整数及结果都在整型范围内,不存在权值和相等的情况。

Output

n 个小姐姐中权值和最高的序号。

Sample Input

3
1  5 10
5 1 10
10 5 1

Sample Output

2

注意:此题中的排序部分不会快速排序的话可以改为冒泡排序!  

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
    int w1, w2, w3;
    int number;
    double sum;
}a[5005];
void quick_sort(struct node *, int, int);
int main()
{
    int n, i;
    while(~scanf("%d", &n))
    {
        memset(a, 0, sizeof(a));
        for(i = 1; i <= n; i++)
        {
            scanf("%d %d %d", &a[i].w1, &a[i].w2, &a[i].w3);
            a[i].number = i - 1;
            a[i].sum = 0.7 * a[i].w1 + 0.2 * a[i].w2 + 0.1 * a[i].w3;
        }
        quick_sort(a, 1, n);///以算好的权值为比较条件进行排序
        printf("%d\n", a[1].number);///输出排列在数组第一位的序号
    }
    return 0;
}
void quick_sort(struct node *a, int l, int r)
{///令权值和大的排列在数组前方
    int i, j;
    struct node key;
    i = l;
    j = r;
    key = a[i];
    if(i >= j)  return;
    while(i < j)
    {
        while(i < j && a[j].sum <= key.sum)
            j--;
        a[i] = a[j];
        while(i < j && a[i].sum >= key.sum)
            i++;
        a[j] = a[i];
    }
    a[i] = key;
    quick_sort(a, l, i - 1);
    quick_sort(a, i + 1, r);
}

猜你喜欢

转载自blog.csdn.net/weixin_44143702/article/details/87923789