当前位置: 首页 > 知识库问答 >
问题:

巧克力盛宴节目

斜光耀
2023-03-14

我正在尝试解决HackerRank上的巧克力盛宴挑战:

小鲍勃喜欢巧克力,他去一家口袋里有N美元的商店。每块巧克力的价格是C美元。商店提供折扣:他每给商店一个M包装纸,就可以免费得到一块巧克力。鲍勃可以吃多少块巧克力?

输入格式:第一行包含测试用例的数量,T. T 行紧随其后,每个行包含三个整数 N、C 和 M。

输出格式:打印Bob吃的巧克力总数。

限制条件:

1≤T≤1000 
2≤N≤105 
1≤C≤N 
2≤M≤N

示例输入:

3
10 2 5
12 4 4
6 2 2

样本输出:

6
3
5

解释在第一种情况下,他可以用10美元买5个巧克力,然后用5个包装纸换另一个巧克力。这样,巧克力的总数是6个。

在第二种情况下,他可以用12美元买3块巧克力。然而,多拿一块巧克力需要4张包装纸。他不能利用这个提议,因此巧克力的总数仍然是3。

在第三种情况下,他可以用6美元买3个巧克力,现在他可以用3个包装纸中的2个换货,额外得到1块巧克力,现在他可以用他的1个未使用的包装纸和新一块巧克力的1个包装纸,再得到一块巧克力,所以总共是5个。

以下是我对C语言解决方案的尝试:

#include<stdio.h>
int main(){
    int t; //total test cases
    scanf("%d",&t);
    for(int a0 = 0; a0 < t; a0++){
        int n; //money
        int c; //cost of 1 chocolate
        int m; //no of wrappers to buy a new chocolate
        scanf("%d %d %d",&n,&c,&m);
        int tc=0,nw=0,nc=0,w=0;//tc=totalChocolates  nw=newWrappers nc=newChocolates w=wrappers
        tc=n/c;
        w=tc;
        while(w>=m){
            nc=(w/m);
            tc+=nc;
            w-=m;
            nw=w%m;
            w+=nw;
        }
        printf("%d\n",tc);    
    }
    return 0;
}

问题是我的程序通过了一些测试用例,而在另一些测试用例中却失败了,但是我无法找到错误在哪里。此外,对于一些其他测试,所花费的时间超过2秒。

测试用例输入例外输出

共有2个答案

平学
2023-03-14

该程序(编辑前)为该输入输出< code>10而不是< code>9。

1
5 1 2

在< code>while循环中尝试:

    < li >从< code>w中减去< code>m*nc而不是< code>m < li >将< code>nc而不是< code>nw添加到< code>tc
乐正乐湛
2023-03-14

你的逻辑相当混乱:

    while(w>=m){
        nc=(w/m);
        tc+=nc;
        w-=m;
        nw=w%m;
        w+=nw;
    }

如果您将其更改为此,则它将通过所有测试用例:

    while(w>=m){
        nc=(w/m);     // how many additional bars can we buy ?
        tc+=nc;       // accumulate total bars purchased
        w-=(nc*m);    // deduct no of wrappers used to purchase additional bars
        w+=nc;        // accumulate additional wrappers
    }
 类似资料:
  • 面试官自我介绍 自我介绍 对测开的看法和理解 预期的测试和开发的比例 登录页面设计测试用例 unittest和pytest优缺点 Python列表推导式 元组的特点 切片的三个参数的含义 装饰器,闭包 什么场景用到装饰器 Python协程(异步) 用过flask,Django吗 Python垃圾回收机制 Python生成器 深拷贝浅拷贝 Linux常用命令有哪些 修改文件相关的命令有哪些 查看大型

  • 我在一次采访中被问到这个问题- 如果n个盒子中有一些巧克力排成一行,则在k名学生中平均分配的巧克力最大数量 。有k个学生。问题是通过从给定批次中选择一系列连续的盒子,在k个学生中平均分配最大数量的巧克力。假设这些框按从左到右从1到n的数字排成一行。我们必须选择一组连续排列的盒子,以便为所有k学生提供最多数量的巧克力。给出了一个数组arr[],表示盒子的行排列,arr[i]表示盒子中位置i处的巧克力

  • 我试着计算斋月的盛宴。我使用HijriCalendar来解决这个问题。我查过维基百科,斋月的宴会是在伊斯兰斋月的最后。 有些日期是好的,但另一些日期在错误的日期(推迟1天) 公众假期斋月宴会第一个值计算,第二个值正确 2010-09-09(2010-09-09) 2011-08-30(2011-08-30) 2012-08-18(2012-08-19)错误1 2013-08-07(2013-08-

  • 在本章中,我们将讨论学习XML DOM对象上的克隆节点操作。 克隆节点操作用于创建指定节点的副本。 方法用于此操作。 cloneNode()方法 此方法返回此节点的副本,即用作节点的通用副本构造函数。 重复节点没有父节点(为),没有用户数据。 语法 方法具有以下语法 - - 如果为,则递归克隆指定节点下的子树; 如果为,则仅克隆节点本身及其属性(如果它是元素的话)。 此方法返回重复节点。 示例 以

  • 提前十分钟进去,发现两个面试官都在了,我只能提前开始了 1. 自我介绍 2. 项目的背景是什么 3. Redis的持久化策略有哪些 4. Redis的淘汰策略有哪些 5. 项目中的RefreshToken是怎么做的?(不记得了,面了这么多场,第一次问到简历的这个内容) 6. 为什么Redis这么快 7. springboot的starter用过哪些? 8. spring的注解了解到哪些 9. 多线

  • 哲学家晚餐问题的指挥解决方案建议使用四码的信号,所有哲学家都试图在右叉之前得到左叉。http://en.wikipedia.org/wiki/Dining_philosophers_problem#Conductor_solution 信号量应该用于访问左fork和访问右fork的每个人吗? 如果一个哲学家能在规定的时间内得到左叉子,但没有得到右叉子,他该怎么办?他们应该把左叉子还给我吗? 哲学家