C语言火柴游戏的程序设计+流程图(4)_毕业论文

毕业论文移动版

毕业论文 > 计算机论文 >

C语言火柴游戏的程序设计+流程图(4)


            {
                settextcolor(RED);
                outtextxy(200, 400, s1);
                break; 
            }
            n=(rand()%(b-1)+1);
            showConputerTake(n);
            a=a-n;
            showTotal(a);
            Sleep(2000);
            InputBox(person, 10, "你要取走几根?",NULL,NULL,0,0,false);
            sscanf(person, "%03d", &z);
            while(z>=b || z<1 || z>a)
            {
                InputBox(person, 10, "数字不符,请重新输入",NULL,NULL,0,0,false);
                sscanf(person, "%03d", &z);
            }
            showPersonTake(z);
            a=a-z;
            showTotal(a);
            if(a==0)
            {
                settextcolor(RED);
                outtextxy(200, 400, s);
            }
        }
    }
}


2    分析
接下来对火柴游戏的问题进行具体的分析,从火柴总数目为25,每次最多可取得数目为5开始,到火柴总数目为m,每次最多可取得数目为n。只要解决了当火柴总数目为m,每次最多可取得数目为n的情况,那么一切问题都会迎刃而解。
2.1    基于火柴总数目为25,每次最多取得数目为5的假设分析
    火柴总数目为25,每次最多可取得数目为5。每轮人机各取一次。
    若双方每次都取最小数目,则一次循环取走的火柴数目为2。25除以2所得结果为12余数1,先手者拿最后一根败,当然,正常的结果肯定不是这样的,因为当火柴总数目逐步减少到6的时候,下一轮的选手便可以直接拿走5根火柴,只留下一根,让对方无可奈何的输掉比赛。
若双方每次都取最大数目,则火柴总数目25除以每次最多可取得数目5,所得结果为5,即当游戏结束2轮后,第三轮剩下5根火柴被先手的选手取走,游戏结束。当然,这种情况也是不可能发生的,因为剩下5根火柴的时候,先手的选手只要取走4跟,留下最后一根给后手的选手,便可以赢得比赛。
通过以上两次的分析我们可以发现,单单依靠这种猜测的方法是没办法解决这个火柴游戏的。因为比赛过程中火柴的总数目会发生改变,一旦火柴的总数目发生了改变,那么游戏者的对策也可能会发生改变,而这些改变是我们无法预测的。但是有一点我们可以确定,从上面的例子中可以看出,当每次最多可取得的火柴数目为5时,倘若最后剩下的火柴数目小于等于6且大于等于2的时候,这时候,这次轮到取火柴的游戏者其实就已经取得了胜利。 (责任编辑:qin)