花生米(三)

本文介绍了一个关于两人轮流取花生米的游戏规则,并通过算法来确定获胜策略。具体地,通过状态转移的方式,利用一个二维数组记录了每种情况下是否能够获胜的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述
五一长假第三天,Tom和Jerry在仓库散步的时候又发现了一堆花生米(仓库,又见仓库……)。这次Tom制定分花生米规则如下: 
???????1、Tom和Jerry轮流从堆中取出k粒花生米吃掉; 
2、第一次取花生米的人只能取一粒,以后取花生米的数量不能超过前一个人取花生米数量的两倍; 
3、为显示规则的公平性,Jerry可以选择先取或者后取。 
Jerry当然还是希望最后一粒花生米被Tom吃掉。请计算,Jerry为了达到目的应该先取还是后取。
 
输入
本题有多个测例,每个测例的输入是一个整数n,n大于零小于等于1000,代表花生米的数量。
n等于0表示输入结束,不需要处理。
 
输出
每个测例在单独的一行内输出一个整数:Jerry先取输出1;Tom先取输出0。 
 
输入样例
1
2
3
4
5
0
 
输出样例
0
1
0
0
1

status[i][j]表示剩余i粒花生米,最多取j粒


#include <iostream>

using namespace std;

int status[1010][1010];     //status[i][j]表示剩余i粒花生米,最多取j粒
void Search(int n)
{
    for(int i = 2; i <= n; i ++)            //剩余i粒花生米
    {
        for(int j = i-1; j <= n; j++)       //最多取j粒,j>= i-1,那么只需要先取i-1,即可赢
            status[i][j] = 1;
        for(int j = 1; j < i-1; j++)       //最多取j粒,j<i-1
        {
            int flag = 0;
            for(int k = 1; k <= j; k++)     //如果取k粒
            {
                //剩余i-k粒花生米,最多取2*k粒
                //任一转移状态为0,Jerry都可以在该状态时
                //由原来的取法变为取2*k个,那么就会赢
                if(status[i-k][2*k] == 0)
                {
                    flag = 1;
                    break;
                }
            }
            status[i][j] = flag;
        }
    }
}

int main()
{

    int n;
    while(cin >> n && n)
    {
        if(n == 1)                      //一粒花生米,后取
        {
            cout << 0 << endl;
            continue;
        }
        Search(n);
        cout << status[n][1] << endl;   //n粒,最多取1粒
    }
}


花生米AJAX-UI系列之:基于JQUERY的GooPanel窗体控件类0.1版 (从今起,以后所有的新控件均使用JQUERY 1.5以上的内核) 特点: 1、既可当浮动窗口用,也可以当作网页中的内容容器框使用。 2、具备relative,absolute两种定位方式,和两种风格。 3、不仅有“关闭、最大化/还原、最小化、收起/下拉,固定最前端”等默认的右上角功能按钮,用户还可自定义排列顺序以及自定设定的按钮。 4、支持手工调整大小,手工移动。 5、内容可以是从AJAX远端载入的内容,也可以是本页面中的一个DOM元素,也可以是嵌入一个iframe。 6、可以把移动的窗体限制在父框架可见的范围内, 也可以让窗体超出父框架显示。 7、使用单个或少数几个窗体时,可分别定义单独的GooPanel类对象;当使用多个窗体时或者在随时可能增减窗体的情况下时,就可用到GooPanelManager管理类 8、使用GooPanelManager管理类时,STICK功能状态(即把窗体固定在最前顶(z-index保持最大))才会有效. 9、用户可以自定义右上角功能按钮点击时,另外要执行的事件方法。 10、用户可以自定义当“重定义窗体宽高”、“重定义绝对定位”、“重设置Z-INDEX值”时分别发生的事件方法。其中绑定“重定义窗体宽高”事件很有用,比如用在窗体尺寸变化后,将内容框里的DOM元素重新Resize. 本品兼容IE6--IE8 ,firefox,chrome浏览器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值