在C语言中,将最大数量的巧克力平均分配给k个学生


给定一个数组形式的连续盒子中巧克力的数量和一个数字k,该数字代表将这些巧克力分配给的学生人数。这里的任务是选择连续的盒子,使得其中巧克力的总和可以平均分配给k个学生。我们还必须确保巧克力的数量最大。

为此,我们将从左到右遍历数组,开始添加巧克力的数量,并将总和除以k。如果它被完全除尽,余数等于0,则将此总和存储在一个变量中。随着我们的进一步移动,我们将重复此过程,直到获得最大的此类总和。问题是找到最大和子数组,该子数组可以被k整除。

输入 

Choco[]={ 1,2,4,5,2,8,3,5 } k=3

输出 − 平均分配给k个学生的最大巧克力数量 − 5

解释 − 最大和子数组是{5,2,8}。巧克力的总和是15。平均分配,所有3个学生获得的最大巧克力数量是5。

注意 − 箱子是连续的,索引是{3,4,5}

输入 

Choco[] = { 2,3,7,5,4,8,2,6 } k=5

输出 − 平均分配给k个学生的最大巧克力数量 − 7

解释 − 最大和子数组是{3,7,5,4,8,2,6}。巧克力的总和是35。

平均分配,所有5个学生获得的最大巧克力数量是7。

下面程序中使用的算法如下

  • 我们使用一个整数数组arr[],其中包含连续容器中巧克力的数量。

  • 元素个数'n'表示盒子的数量。

  • 将学生人数'k'作为输入。

  • 函数maxChocolate(int arr[], int n, int k)接受三个参数:数组、其大小和学生人数k。

  • 我们将使用for循环从开头遍历arr[]。

  • 使用两个变量sum和maxSum。Sum存储子数组连续元素的和。

  • maxSum用于存储到目前为止找到的最大和。

  • 在嵌套的for循环中,继续添加元素并检查sum%k是否给出余数0。

    如果此sum > maxSum,则更新maxSum。

  • 最后,maxSum将包含可以平均分配给k个学生的最大巧克力数量。

  • 返回结果为maxSum/k,这是每个学生获得的巧克力数量。

示例

 在线演示

#include <stdio.h>
// to find the maximum number
// of chocolates to be distributed equally among
// k students
int maxChocolates(int arr[], int n, int k){
   int sum;
   int maxSum = 0;
   for(int i=0;i<n;i++){
      sum=0;
      for(int j=i;j<n;j++){
         sum+=arr[j];
         if(sum%k==0 && sum>maxSum)
            maxSum=sum;
      }
   }
   // distributed equally among 'k' students
   return (maxSum / k);
}
int main(){
   int arr[] = { 2, 7, 6, 1, 4, 5 ,5, 3 };
   int n =8;
   int k =3;
   printf("Maximum number of chocolates to be distributed equally among k students: %d   ",maxChocolates(arr, n, k));
   return 0;
}

输出

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

Maximum number of chocolates to be distributed equally among k students − 11

更新于:2020年8月14日

1K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.