在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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
JavaScript
PHP