这个怎么做啊我看晕了也不会

进行一次游戏,胜利方式如下:输入一个数字N代表桌子上一共有N枚金币,有AB两位玩家参与游戏,两位玩家每次都可以从桌上轮流拿走1枚或2枚金币,从A开始,获得最后一枚金币的玩家为胜利者。根据输入的N的数量,输出拥有必胜策略的玩家名字,以及需要进行的轮数K。
样例输入:4
样例输出:A 3

样例输入:102
样例输出:B 68

必胜策略是当金币除以3余数为1时拿一个,余数为2时拿两个,让对方拿时金币正好是3的倍数.
这样初始金币正好是3的倍数时 B 必胜, 不是3的倍数时 A 必胜

你题目的解答代码如下:

#include<iostream>
using namespace std;

int main()
{
    int n,i=0,p=1,t;
    cin >> n;
    while (n>0)
    {
        p = !p;
        if (n % 3 == 1)
            n -= 1;
        else
            n -= 2;
        i++;
    }

    if (p==0)
        cout << "A" << " " << i << endl;
    else
        cout << "B" << " " << i << endl;
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

我记得这是小学四年级左右数学课本上一道题吧😂😅
假设有n个金币,从1到n号,要想赢必须抢到n-3,抢到n-3就必须抢到n-6,以此类推。所以说,如果是3的倍数,先手必胜,否则后手必胜。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632