版权声明:本人原创文章若需转载请标明出处和作者!沙 https://blog.csdn.net/weixin_44143702/article/details/87923789
小 I 的小姐姐
Time Limit: 1000 ms Memory Limit: 65536 KiB
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);
}