님의 수정된 게임은 배열의 최적화 게임입니다. 이 게임은 시작 플레이어와 최적의 움직임을 기반으로 승자를 예측합니다.
게임 논리 - 이 게임에서는 요소를 포함하는{} 배열이 제공됩니다. 일반적으로 게임을 하는 두 명의 플레이어, 즉 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