Trò chơi sửa đổi của Nim là một trò chơi tối ưu hóa các mảng. Trò chơi này dự đoán người chiến thắng dựa trên người chơi xuất phát và nước đi tối ưu.
Logic trò chơi - Trong trò chơi này, chúng ta được cung cấp một mảng {}, chứa các phần tử. Nói chung có hai người chơi chơi trò chơi tên là player1 và player2. Mục đích của cả hai là đảm bảo rằng tất cả các số của chúng được xóa khỏi mảng. Bây giờ, người chơi 1 phải loại bỏ tất cả các số chia hết cho 3 và người chơi 2 phải loại bỏ tất cả các số chia hết cho 5. Mục đích là để đảm bảo rằng họ loại bỏ tất cả các phần tử một cách tối ưu và tìm ra người chiến thắng trong trường hợp này.
Mẫu
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.
Xem trước mã
Đoạn mã sẽ tìm số phần tử mà A có thể loại bỏ, số phần tử mà B có thể loại bỏ và số phần tử mà cả hai đều có thể loại bỏ. Dựa trên số lượng các phần tử mà cả hai đều có thể loại bỏ giải pháp được tìm thấy. Vì A loại bỏ các phần tử đầu tiên, nó có thể giành chiến thắng ngay cả khi anh ta phải loại bỏ một phần tử nhiều hơn B. Trong trường hợp thông thường, người chơi có số phần tử tối đa để loại bỏ sẽ thắng.
CHƯƠNG TRÌNH TÌM GIẢI PHÁP CHO TRÒ CHƠI 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; }
Đầu ra
Player 2 is the Winner