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

Nim in C의 수정된 게임?

<시간/>

님의 수정된 게임은 배열의 최적화 게임입니다. 이 게임은 시작 플레이어와 최적의 움직임을 기반으로 승자를 예측합니다.

게임 논리 - 이 게임에서는 요소를 포함하는{} 배열이 제공됩니다. 일반적으로 게임을 하는 두 명의 플레이어, 즉 player1과 player2가 있습니다. 둘 다의 목표는 모든 숫자가 배열에서 제거되었는지 확인하는 것입니다. 이제 player1은 3으로 나눌 수 있는 모든 숫자를 제거해야 하고 player2는 5로 나눌 수 있는 모든 숫자를 제거해야 합니다. 목표는 모든 요소를 ​​최적으로 제거하고 이 경우 승자를 찾는 것입니다.

샘플

Array : {1,5, 75,2,65,7,25,6}
Winner : playerB.
A removes 75 -> B removes 5 -> A removes 6 -> B removes 65 -> No moves for A, B wins.

코드 미리보기

코드는 A가 제거할 수 있는 요소의 수, B가 제거할 수 있는 요소의 수 및 둘 다 제거할 수 있는 요소의 수를 찾습니다. 둘 다 제거할 수 있는 요소의 수를 기반으로 솔루션을 찾습니다. A는 첫 번째 요소를 제거하므로 B보다 하나의 요소를 더 제거해야 하는 경우에도 승리할 수 있습니다. 일반적으로 제거할 요소의 최대 수를 가진 플레이어가 승리합니다.

NIM 게임의 솔루션을 찾기 위한 프로그램

#include <bits/stdc++.h>
using namespace std;
int main() {
   int arr[] = {1,5, 75,2,65,7,25,6};
   int n = sizeof(arr) / sizeof(arr[0]);
   int movesA = 0, movesB = 0, movesBoth = 0;
   for (int i = 0; i < n; i++) {
      if (arr[i] % 3 == 0 && arr[i] % 5 == 0)
         movesBoth++;
      else if (arr[i] % 3 == 0)
         movesA++;
      else if (arr[i] % 5 == 0)
         movesB++;
   }
   if (movesBoth == 0) {
      if (movesA > movesB)
         cout<<"Player 1 is the Winner";
      cout<<"Player 2 is the Winner";
   }
   if (movesA + 1 > movesB)
      cout<<"Player 1 is the Winner";
   cout<<"Player 2 is the Winner"; ;
   return 0;
}

출력

Player 2 is the Winner