PTA:7-96 获奖的运气

作者 黄龙军

单位 绍兴文理学院

某年,小明参加了程序设计竞赛,解题排名第二,运气好,评奖时各级获奖名额都向上取整,一等奖本来有1.36个名额,变成2个名额,于是获得了一等奖。

当然,有运气也还需要实力才能获奖。获奖名额是按参赛人数和获奖百分比计算的,且向上取整。对于一个实数d,向上取整得到的是不小于d的最小整数i,如:d=1.0,则i=1;d=1.1,则i=2。

给出参赛队伍总数n(n<=300),一、二、三等奖的获奖百分比p1,p2,p3,小明的排名m,请你确定运气好并有实力的他能获什么奖。

简单起见,一、二、三等奖的获奖名额按参赛队伍总数n及对应奖项的获奖比例p1,p2,p3直接确定,例如,n=17, p1=8%, p2=15%, p3=25%,则由17*8%=1.36,17*15%=2.55,17*25%=4.25,最终一、二、三等奖的获奖名额分别为2,3,5。

输入格式:

输入数据的第一行为一个正整数T(1<=T<=20), 表示测试数据的组数。然后是T组测试数据,每组测试数据的第一行输入2个正整数n,m(0<n,m<=300);第二行输入3个正整数p1,p2,p3(0<p1,p2,p3<100,p1+p2+p3<=100),含义见描述。

输出格式:

对于每组测试,在一行上输出小明所获奖项(一、二、三等奖分别输出gold、silver、bronze)或sorry(很遗憾,不能获奖)。

输入样例:

2
17 2
8 15 25
200 99
8 15 25

输出样例:

gold
sorry

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

//看到获奖名额都往上取整数,我真的笑了,坑壁题目
#include <stdio.h>
#include <math.h>
int main()
{
    int    z;//组
    double p1, p2, p3, n, m;
    //参赛队伍总数n(n<=300),一、二、三等奖的获奖百分比p1,p2,p3,小明的排名m
    double gold = 0, silver = 0, bronze = 0;
    scanf("%d", &z);
    while( z > 0 )
    {
        scanf("%lf %lf", &n, &m);
        scanf("%lf %lf %lf", &p1, &p2, &p3);
        gold = ceil ( n * p1 / 100.00 );
        //计算1等奖的名额 ceil是用于计算运费等小数取整的函数
        silver = ceil ( n * ( p1 + p2 ) / 100.00 );
        //计算2等奖的名额
        bronze = ceil ( n * ( p1 + p2 + p3 ) / 100.00 );
        //计算3等奖的名额
        if( m > 0 && m <= gold )
            //排名在1等奖的名额之中就输出gold
            printf( "gold\n" );
        else if( m > gold && m <= silver )
            //排名在1等奖的名额之后2等奖之前就输出silver
            printf( "silver\n" );
        else if( m > silver && m <= bronze )
            //排名在2等奖的名额之后3等奖之前就输出bronze
            printf( "bronze\n" );
        else
            printf( "sorry\n" );
        z = z - 1;//每循环一次就要减去一组
    }
    return 0;
}

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值