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
Hint
Source
【2017级《程序设计基础(B)II》期末上机考试】IceCapriccio
方法一:运用结构体;
#include <stdio.h>
#include <stdlib.h>
struct node
{
int a1,a2,a3;
int x;//计算权重后的数值;
int id;//编号;
}a[5000];
int main()
{
int n,i;
while(~scanf("%d",&n))
{
int max = 0,k;
//将max初始化为零,或在下面将第一个先默认为max;
for(i=0;i<n;i++)
{
scanf("%d%d%d",&a[i].a1,&a[i].a2,&a[i].a3);
a[i].x = a[i].a1*0.7+a[i].a2*0.2+a[i].a3*0.1;
a[i].id = i;
}
for(i=0;i<n;i++)//寻找看中的小姐姐;
{
if(a[i].x >max)
{
max = a[i].x;
k = a[i].id;
}
}
printf("%d\n",k);//输出序号
}
return 0;
}
两种采用结构体的方法所用的结构体中包含的数据用所不同
#include <stdio.h>
#include <stdlib.h>
struct node
{
int x;//计算权重后的数据
int id;//序号
}a[5000];
int main()
{
int n,i;
int w1,w2,w3;
while(~scanf("%d",&n))
{
int max = 0,k;
for(i=0;i<n;i++)
{
scanf("%d%d%d",&w1,&w2,&w3);
a[i].x = w1*0.7+w2*0.2+w3*0.1;
//没输入一组w1,w2,w3计算出权重数据
a[i].id = i;
}
for(i=0;i<n;i++)//寻找计算后权重数最大的
{
if(a[i].x >max)
{
max = a[i].x;
k = a[i].id;
}
}
printf("%d\n",k);//输出序号
}
return 0;
}
方法二:下面的方法十分简单易懂,并且占用空间少,但是并没用运用结构体
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i;
while(~scanf("%d",&n))
{
int max = 0,k;
int a1,a2,a3;
for(i=0;i<n;i++)
{
scanf("%d%d%d",&a1,&a2,&a3);
int sum = a1*0.7 + a2*0.2 + a3*0.1;
if(sum>max)
{
max = sum;
k = i;
}
}
printf("%d\n",k);
}
return 0;
}