• LuoGu P1909 买铅笔???


    题目描述

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

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

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

    输入格式:

      输入的第一行包含一个正整数n,表示需要的铅笔数量。

      接下来三行,每行用两个正整数描述一种包装的铅笔:其中第一个整数表示这种 包装内铅笔的数量,第二个整数表示这种包装的价格。

      保证所有的7个数都是不超过10000的正整数。

    输出格式:

      输出一行一个整数,表示P老师最少需要花费的钱。

    链接 https://www.luogu.org/problemnew/show/1909

      说实话吧,这个题确实不太想写(大水题儿??居然还因为0x3fWA了一次。。。真是智障了@_@),可是机房的小伙伴居然有不会的。。。只能勉为其难了==

       这个题确实没太有什么难点,就是学了几个周的小伙伴都能有思路,一共有三种包装,每一种包装里都会包含一定数量的铅笔,并有一定的价格,我们用n整除一下x,就会的到最少需要买这种包装的数量,然后将n/x在乘上y(包装的价格),就会得出只买这种包装最少需要的钱,一共三次,取这三次的最小值即可。

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 int main()
     5 {
     6     int n,m,ans=0x3fffffff,x,y;
     7     scanf("%d",&n);
     8     for(int i=1;i<=3;i++){
     9         scanf("%d%d",&x,&y);//x表示每个包装内铅笔的数量,y表示每个包装的价格;
    10         m=n/x;
    11         ans=min(ans,m*y);
    12     }
    13     printf("%d\n",ans);
    14     return 0;
    15 }
    点击查看代码

      但是,我们漏了一个很重要的地方,也就是说,上面的代码是错误的解法(想一下为什么)。

      答案是:我们将 n/x (整除)将会的到下取整的答案,举个例子吧,当一共需要买 25(n) 只铅笔时,这种包装每个单位中有包含 17(x) 支铅笔,所以n/x会得到 1 而不是我们想要的 2 。但是如果是 n=25、x=5时,我们恰好能得到我们想要的答案(n/x) 5 ,也就是说当n能够整除x时  if(n%x==0),我们恰好能得到想要的答案,但  if(n%x!=0),我们会得到比想要的答案小 1 的结果,我们便需要将得到的 n/x ++。所以加上第二个if语句特判一下就可以完美的解决这个问题了!

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 int main()
     5 {
     6     int n,m,ans=0x3fffffff,x,y;
     7     scanf("%d",&n);
     8     for(int i=1;i<=3;i++){
     9         scanf("%d%d",&x,&y);//x表示每个包装内铅笔的数量,y表示每个包装的价格;
    10         m=n/x;
    11         if(n%x) m++;
    12         ans=min(ans,m*y);
    13     }
    14     printf("%d\n",ans);
    15     return 0;
    16 }
    这才是正确代码==
  • 相关阅读:
    数据库自定义表值函数Split(@LongStr, @SplitStr, @IsDistinct )
    牛客_{}大括号里面的内容都会执行,如果它不是成员函数的时候,看成是构造函数中的方法;
    剑指offer——替换字符串
    剑指offer_快速查找递增二维数组中是否存在目标
    IP地址理解_IP地址=网络地址+主机地址,但是具体前面多少是网络地址看题目说明
    TCP/IP三次握手
    牛客_剑指offer_重建二叉树,再后续遍历_递归思想_分两端
    牛客OJ——[编程题]A+B和C__如何输入多组测试数据(测试OK)
    学术_聚类种类分析(1)(转载)
    HW-找7(测试ok满分注意小于等于30000的条件)
  • 原文地址:https://www.cnblogs.com/RisingGods/p/8127275.html
Copyright © 2020-2023  润新知