HDOJ 1070 Milk

【题意】喝牛奶,

1. 每天喝200ml。

2. 最多喝5天,超过5天剩下多少也不喝了。

3. 剩下的如果小于一天喝的(200ml)就不要了。 

4. 所有的牛奶都是当天产的。

5. 按照每天的价格选择最便宜的。

6. 如果价格都是最便宜的,选择大瓶(容量大)的。

【代码:WA】:考虑错了2,5,6条件。

#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;

#define MAX 100+10
struct Milk
{
    char name[MAX];
    int price;
    int volumn;
};

int cmp(const void *a, const void *b)
{
    struct Milk *c = (Milk*)a;
    struct Milk *d = (Milk*)b;
    if ((c->price/c->volumn) == (d->price/d->volumn))
        return strlen(c->name) - strlen(d->name);
    else
        return (c->volumn/c->price) - (d->volumn/d->price);
}

int main()
{
    int N = 0;
    cin >> N;
    while (N--)
    {
        Milk milk[MAX];
        int n = 0, i = 0;
        cin >> n;
        for (i = 0; i < n; )
        {
            Milk temp;
            cin >> temp.name >> temp.price >> temp.volumn;
            if (temp.volumn >= 200)
                milk[i++] = temp;
            else
                n--;
        }
        qsort(milk, n, sizeof(milk[i]), cmp);
        cout << milk[n-1].name << endl;
    }
    return 0;
}

【代码:AC】

#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;

#define MAX 100+10
struct Milk
{
    char name[MAX];
    int price;
    int volumn;
};

int cmp(const void *a, const void *b)
{
    struct Milk *c = (Milk*)a;
    struct Milk *d = (Milk*)b;
    int day1 = c->volumn/200;
    if (day1 >5)
        day1 = 5;
    int day2 = d->volumn/200;
    if (day2 >5)
        day2 = 5;
    if ((c->price/day1) == (d->price/day2))
        return c->volumn - d->volumn;
    else
        return (d->price/day2) - (c->price/day1);
}

int main()
{
    int N = 0;
    cin >> N;
    while (N--)
    {
        Milk milk[MAX];
        int n = 0, i = 0;
        cin >> n;
        for (i = 0; i < n; )
        {
            Milk temp;
            cin >> temp.name >> temp.price >> temp.volumn;
            if (temp.volumn >= 200)
                milk[i++] = temp;
            else
                n--;
        }
        qsort(milk, n, sizeof(milk[i]), cmp);
        cout << milk[n-1].name << endl;
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值