Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

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을 제공하는지 확인합니다.

    또한 이 합계> 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