C语言火柴游戏的程序设计+流程图(4)
时间:2018-05-08 14:24 来源:毕业论文 作者:毕业论文 点击:次
{ 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) |