可在C中购买的最大糖果数量

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

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

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

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

让我们通过示例来理解。

输入− 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}

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

  • 整数数组candies []用于存储类型为i的candy的数量。

  • 变量“大小”存储阵列糖果的长度。

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

  • 首先,假设我们购买了最后一类糖果。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;
   //从倒数第二开始
   for (int i = n - 2; i >= 0; i--) {
      //当前的糖果量
      //可以购买的类型
      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