● The Nim Game
بازی دو نفره نیم
تقریباً همه ی برنامه نویس ها با بازی نیم آشنا هستند، نیم یک بازی دو نفره و دارای استراتژی برد است که معمولاً با 3کپه از سنگریزه (یا لوبیا، چوبکبریت و...) انجام میشود. در هر نوبت هر بازیکن از یک کپه حداقل یک سنگریزه و حداکثر تمام کپه را بر میدارد. هر بازیکنی که نتواند در نوبت خود هیچ سنگ ریزه ای بردارد، باخته است.
روش کار این کد:
برنامه ابتدا تعداد سنگ ریزه های 3ستون را از کاربر دریافت می کند. هر بازیکن در نوبت خود ابتدا شماره ی ستون و تعداد سنگ ریزه هایی که از آن برمی دارد را وارد می کند (بعد از هر حرکت، بازیکن عوض می شود) و در نهایت کسی بازنده است که نتواند سنگ ریزه ای را انتخاب کند.
مثال: یک بازی نیم را با کپههای {۳، ۴ و ۵} تایی در نظر بگیرید.
A B C
| | |
۵ ۴ ۳ بازیکن۱ دو سنگریزه از A برمیدارد
۵ ۴ ۱ بازیکن۲ سه سنگریزه از C برمیدارد
۲ ۴ ۱ بازیکن۱ یکی از B برمیدارد
۲ ۳ ۱ بازیکن۲ یکی از B برمیدارد
۲ ۲ ۱ بازیکن۱ کپه A را برمیدارد
۲ ۲ ۰ بازیکن۲ یکی از B بر میدارد
۲ ۱ ۰ بازیکن۱ یکی از C برمیدارد
۱ ۱ ۰ بازیکن۲ یکی از B برمیدارد
۱ ۰ ۰ بازیکن۱ آخرین سنگریزه را برمیدارد و پیروز میشود.
// A Drop of the Programming Sea - adops.blog.ir #include <iostream> #include <cstdlib> using namespace std; int main() { int k,n,m,t,s; cin >> k >> n >> m; while(!0) { cin >> s >> t; if(s > 3) cerr << endl << "Just 3 cells\n\a" << endl; else { switch(s) { case 1: k-=t; break; case 2: n-=t; break; case 3: m-=t; break; default: break; } if(k<0 || n<0 || m<0) { cout << "LOSE!\a\a\a\a\a" << endl; break; } } } return 0; }