سکه بازی دو نفره - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

سکه بازی دو نفره

0 امتیاز
یک سوال تقریبا سخت (البته برای من تقریبا سخته ها شاید برای شما آسون باشه)

خب سوال میگه که:

n تا سکه روی زمین داریم و دونفر بازیکن این بازی چجوریه؟اینجوریه که هر نفر توی نوبت خودش از 1 تا m یک عدد انتخاب میکنه و اندازه ی اون عددی که انتخاب کرده سکه برمیداره کسی که آخرین سکه رو برداره برندست

شما یک برنامه بنویسید که n و m رو از ورودی گرفته و بگه که استراتژی برد با کی هست؟

برای مثال اگه n = 25 باشه و m = 4

استراتژی برد برای نفر دوم هست اگه اینجوری بازی کنه نفر اول هر عددی رو انتخاب میکنه نفر دوم یک عددی انتخاب میکنه که جمعش با عدد نفر اول بشه 5

خب اینجوری اولی هرچی انتخاب کنه با انتخاب نفر دوم 5 تا سکه کم میشه پس آخرین سکه برای نفر دوم هست.
سوال شده اردیبهشت 16, 1393  بوسیله ی senator77 (امتیاز 226)   6 14 25
راهنمایی میکنم جواب نمیدم
اگر n به m+1 بخش پذیر بود، نفر دوم به همون روشی که تو گفتی برنده میشه
وگرنه، استراتژی برد با نفر اول هست. (بگم چرا؟؟)
الآن برنامه ش رو هم مینویسم :دی

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

اگر نتونستی بفهمی چرا وقتی n بر m+1 بخش پذیر نیست، نفر اول برنده است، این رو بخون.

چون اگر توی حرکت اول نفر اول به اندازه ی باقی مانده ی n بر m+1 برداره، در تمام حرکات بعدی اگر نفر دوم k تا سکه برداره و نفر اول به اندازه ی m-k+1 برداره، برنده میشه. همون روشی که گفتی

کد (به همین سادگی؛ به همین خوشمزگی...):

#include <iostream>

using namespace std;

int main()
{
    int n, m;
    cin>>n>>m;
    if(n%(m+1)==0)
        cout<<2<<endl;
    else
        cout<<1<<endl;
    return 0;
}

 

پاسخ داده شده اردیبهشت 16, 1393 بوسیله ی MaGaroos (امتیاز 658)   11 18 36
انتخاب شد اردیبهشت 16, 1393 بوسیله ی senator77
خیلی قشنگ بود
ب مخ خودم شک کردم که چرا نتونستم حل کنم اینو
مر30
خواهش میکنم
سوالِ جایی بود این؟
اگه آره بگو ما هم بیایم سابمیت کنیم :د
نه بابا توی مسئله های الگوریتمی فصل نظریه بازی ها اولین سوال
میگم مجید این وبلاگرو درست کنیم؟
اوکی
ولی در موردش این جا صحبت نکن
...