Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

เกมดัดแปลงของ Nim ใน C ?


เกมดัดแปลงของ Nim เป็นเกมเพิ่มประสิทธิภาพของอาร์เรย์ เกมนี้ทำนายผู้ชนะตามผู้เล่นเริ่มต้นและการเคลื่อนไหวที่เหมาะสม

ตรรกะของเกม - ในเกมนี้ เราได้รับอาร์เรย์{} ที่มีองค์ประกอบ โดยทั่วไปมีผู้เล่นสองคนที่เล่นเกมคือ player1 และ player2 จุดมุ่งหมายของทั้งคู่คือเพื่อให้แน่ใจว่าตัวเลขทั้งหมดจะถูกลบออกจากอาร์เรย์ ตอนนี้ ผู้เล่น1 ต้องลบตัวเลขทั้งหมดที่หารด้วย 3 ลงตัว และผู้เล่น2 ต้องลบตัวเลขทั้งหมดที่หารด้วย 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