卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章16743本站已运行3321

最多可以购买的糖果数量

最多可以购买的糖果数量

我们得到了一个糖果[]数组,长度存储在“size”中。每个元素 candies[i] 都有一个 i 类型糖果的编号。目标是用任意金额购买尽可能多的糖果。条件如下 -

如果您购买类型 i 的 X[i] (0<= X[i] <= candies[i] ),那么对于所有 j ( 1<=j<= i ) 至少必须满足以下条件之一 -

  • X(j) < X(i)(购买的类型 j 的糖果少于类型i )

  • X(j)=0,没有购买j类型的糖果

我们通过例子来理解。< /p>

输入 - Arr[] = { 1,3,5,2,6,7 }。

输出 - 最大值可以购买的糖果 - 16

说明 - 购买类型 i { 0,3,5,2,6,0 }

的糖果>输入 - Arr[] = { 5,7,7,3,4 }.

输出 - 可以购买的最大糖果 - 10

解释 - 购买类型 i { 0,0,7,3,0 } 的糖果

以下程序中使用的方法如下

< ul class="list">
  • 整数数组candies[]用于存储类型i的糖果数量。

  • 变量'size'存储数组糖果的长度。

  • 函数 maxCandies(int arr[], int n) 用于返回可购买的糖果总数。

    < /li>
  • 首先假设我们买了最后一种糖果。 buy=arr[n-1]

  • 从倒数第二个元素开始,for(i=n-2;i>=0;i--)

  • 变量x存储当前类型可以购买的糖果数量。 x=arr[i] 或 buy-1,以较小者为准。

  • 如果 x 不是 zeo,则将其添加到总数中。

  • 如果总和大于之前购买的金额,则购买=x。

  • 返回购买结果。

  • 示例

     实时演示

    #include <stdio.h>
    int maxCandies(int arr[], int n){
       int bought = arr[n - 1];
       int total = bought;
       // Starting from second last
       for (int i = n - 2; i >= 0; i--) {
          // Amount of candies of the current
          // type that can be bought
          int x = arr[i]<bought-1?arr[i]:bought-1;
          if (x >= 0) {
             total += x;
             bought = x;
          }
       }
       return total;
    }
    int main(){
       int candies[] = { 1,2,4,3,7 };
       int size = 5;
       printf("Total Candies that can be bought: %d", maxCandies(candies, size));
       return 0;
    }

    输出

    如果我们运行上面的代码,它将生成以下输出 -

    Total Candies that can be bought: 13

    卓越飞翔博客
    上一篇: C和C++之间的区别是什么?
    下一篇: 返回列表
    留言与评论(共有 0 条评论)
       
    验证码:
    隐藏边栏