C 小I的小姐姐 SDUT

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;
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碧羽o(* ̄▽ ̄*)ブ回雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值