Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 돌을 제거하여 최대 점수를 찾는 프로그램

<시간/>

세 개의 값 b와 c가 있다고 가정합니다. 우리는 크기가 각각, b, c인 돌 더미 세 개를 가지고 솔리테어 게임을 하고 있습니다. 각 턴마다 플레이어는 비어 있지 않은 두 개의 다른 더미를 선택하고 각각에서 하나의 돌을 가져 와서 점수에 1점을 추가합니다. 비어 있지 않은 더미가 2개 미만이면 게임이 종료됩니다. 그래서 우리는 당신이 얻을 수 있는 최대 점수를 찾아야 합니다.

따라서 입력이 a =4, b =4, c =6과 같으면 초기 상태가 (4, 4, 6)이므로 출력은 7이 되고 다음 단계를 따를 수 있습니다. -

  • 현재 상태가 (3, 3, 6)이 되도록 첫 번째 및 두 번째 더미에서 선택합니다.

  • 현재 상태가 (2, 3, 5)가 되도록 첫 번째 및 세 번째 더미에서 선택

  • 현재 상태가 (1, 3, 4)가 되도록 첫 번째 및 세 번째 더미에서 선택

  • 현재 상태가 (0, 3, 3)이 되도록 첫 번째 및 세 번째 더미에서 선택

  • 현재 상태가 (0, 2, 2)가 되도록 두 번째 및 세 번째 더미에서 선택

  • 현재 상태가 (0, 1, 1)이 되도록 두 번째 및 세 번째 더미에서 선택

  • 현재 상태가 (0, 0, 0)이 되도록 두 번째 및 세 번째 더미에서 선택

그리고 마지막으로 비어 있지 않은 더미가 두 개 미만이므로 게임이 종료됩니다.

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

  • minimum :=b, c 중 최소값

  • 최대 :=최대, b 및 c

  • 왼쪽 :=a + b + c - 최대 - 최소

  • 최대-왼쪽 <=최소인 경우

    • 최소값 + 왼쪽 - (1 + 최소값 - (최대 왼쪽))/2의 몫을 반환

  • 반환 최소값 + (최소값(최대-최소) 및 왼쪽)

예시

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

def solve(a, b, c):minimum =min(a,b,c) maximum =max(a,b,c) left =a+b+c-maximum-minimum if maximum-left<=최소값:최소값 반환 + 왼쪽(1+최소값-(최대 왼쪽))//2 최소값 반환 + 최소값(최대-최소, 왼쪽)a =4b =4c =6print(solve(a, b, c)) 

입력

4, 4, 6

출력

7