zoukankan      html  css  js  c++  java
  • NOIP普及组:买铅笔

    参加考试的时候,第一题我足足花了四十多分钟(因为那奇葩的键盘,幸好我向老师报告更换了键盘),还是只得了五十分。。。

    题目描述:

    P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P老师决定只买同一种包装的铅笔。

    商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过n支铅笔才够给小朋 友们发礼物。

    现在P老师想知道,在商店每种包装的数量都足够的情况下,要买够至少n支铅笔最少需要花费多少钱。

    然后贴一下50分代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    int n, p[4], v[4], ans[4];
    int main() {
        freopen("pencil.in", "r", stdin);
        freopen("pencil.out", "w", stdout);
        scanf("%d", &n);
        for (int i = 1; i <= 3; i++) {
            scanf("%d%d", &p[i], &v[i]);
        }
        for (int i = 1; i <= 3; i++) {
            ans[i] = int(double(n) / p[i] + 1) * v[i];
        }
        ans[0] = min(ans[1], ans[2]);
        ans[0] = min(ans[0], ans[3]);
        printf("%d
    ", ans[0]);
        return 0;
    }

    这题是简单的数学计算,然后比较最小值。

    出错的地方是 ans[i]=int(double(n)/p[i]+1)*v[i]; 这一句上。

    我的想法是让 n/p[i] 得到的值是小数位补足进1的。而真正的int和int相除的得数是默认舍去小数为的,与自动补足进1相反。所以我捣鼓了半天,样例数据过了,还是没有拿到满分。

    而真正的进1补满方法是

    if (n % p[i] == 0) ans[i] = (n / p[i]) * v[i];
    else               ans[i] = (n / p[i] + 1) * v[i];

    贴上满分代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    int n, p[4], v[4], ans[4];
    int main() {
        freopen("pencil.in", "r", stdin);
        freopen("pencil.out", "w", stdout);
        scanf("%d", &n);
        for (int i = 1; i <= 3; i++) {
            scanf("%d%d", &p[i], &v[i]);
        }
        for (int i = 1; i <= 3; i++) {
            if (n % p[i] == 0) ans[i] = (n / p[i]) * v[i];
            else               ans[i] = (n / p[i] + 1) * v[i];
        }
        ans[0] = min(ans[1], ans[2]);
        ans[0] = min(ans[0], ans[3]);
        printf("%d
    ", ans[0]);
        return 0;
    }

     


    Post author 作者: Grey
    Copyright Notice 版权说明: Except where otherwise noted, all content of this blog is licensed under a CC BY-NC-SA 4.0 International license. 除非另有说明,本博客上的所有文章均受 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 保护。
  • 相关阅读:
    Shell中判断语句if中-z至-d的意思
    每日英语-20171129
    THINK PHP 学习笔记20171115
    每日英语-20171115
    git bash安装和基本设置
    Centos6.8搭建Git服务(git版本可选)
    一键安装lamp环境出现的问题
    用PHP实现反向代理服务器
    动词的过去式、过去分词、现在分词
    树莓派 中文
  • 原文地址:https://www.cnblogs.com/greyqz/p/6371380.html
Copyright © 2011-2022 走看看