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

3개의 힙에서 선택할 수 있는 최대 스톤을 찾는 C++ 코드

<시간/>

세 개의 숫자 b와 c가 있다고 가정합니다. 각각, b, c개의 돌이 있는 세 개의 돌 더미가 있습니다. 이러한 작업을 수행할 수 있을 때마다 -

  • 첫 번째 더미에서 하나의 돌을 가져오고 두 번째 더미에서 두 개의 돌을 가져옵니다(힙에 필요한 수의 돌이 있을 때)

  • 두 번째 더미에서 하나의 돌을 가져오고 세 번째 더미에서 두 개의 돌을 가져옵니다(힙에 필요한 수의 돌이 있을 때)

얼마나 많은 돌을 모을 수 있는지 계산해야 합니까?

따라서 입력이 =3과 같으면; b =4; c =5이면 출력은 9가 됩니다. 두 번의 작업으로 두 번째 힙에서 2개의 스톤을 가져오고 세 번째 힙에서 4개의 스톤을 가져올 수 있기 때문에 총 6개의 스톤이 있고 첫 번째 1개와 두 번째 2개에서 3개의 추가 스톤을 가져옵니다.

단계

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

return (minimum of b and floor of (c / 2) + minimum of a and (b - minimum of b and floor of (c / 2)) / 2) * 3

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
int solve(int a, int b, int c){
   return (min(b, c / 2) + min(a, (b - min(b, c / 2)) / 2)) * 3;
}
int main(){
   int a = 3;
   int b = 4;
   int c = 5;
   cout << solve(a, b, c) << endl;
}

입력

3, 4, 5

출력

9