可在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(intarr[],intn)用于返回可以购买的糖果总数。
首先,假设我们购买了最后一类糖果。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