在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