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

C에서 살 수 있는 최대 사탕 수


'size'에 저장된 길이의 사탕[] 배열이 제공됩니다. 각 요소 candies[i]에는 유형 i의 사탕에 대한 번호가 있습니다. 목표는 금액에 관계없이 가능한 한 많은 사탕을 구입하는 것입니다. 조건은 다음과 같습니다 -

유형 i(0<=X[i] <=candies[i] )의 X[i]를 구매하는 경우 모든 j( 1<=j<=i )에 대해 다음 조건 중 적어도 하나는 참이어야 합니다.

  • X(j)

  • 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 유형의 사탕 수를 저장하는 데 사용됩니다.

  • 변수 '크기'는 배열 캔디의 길이를 저장합니다.

  • maxCandies(int arr[], int n) 함수는 구매할 수 있는 총 사탕 수를 반환하는 데 사용됩니다.

  • 먼저 우리가 마지막 종류의 사탕을 샀다고 가정해 봅시다. 구매함=arr[n-1]

  • 두 번째 마지막 요소부터 시작하여 for(i=n-2;i>=0;i--)

  • 변수 x는 구매할 수 있는 현재 유형의 사탕 양을 저장합니다. x=arr[i] 또는 buy-1 중 더 작은 것

  • x가 0이 아닌 경우 이를 합계에 추가합니다.

  • 합계가 이전에 구매한 값보다 크면 구매한 값=x입니다.

  • 구매한 결과를 반환합니다.

예시

#include <stdio.h>
int maxCandies(int arr[], int n){
   int bought = arr[n - 1];
   int total = bought;
   // Starting from second last
   for (int i = n - 2; i >= 0; i--) {
      // Amount of candies of the current
      // type that can be bought
      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