假设排列着100个乒乓球,由两个人轮流拿球装入口袋,能拿到第100个乒乓球的人为胜利者。条件是:每次拿球者至少要拿1个,但最多不能超过5个,问:如果甲最先拿球的人,该拿几个?以后怎么拿就能保证甲能得到第100个乒乓球?
分析:倒着分析,假如要拿到第一百个球,那么,剩下的球为6到10个,不管乙那几个,甲一定取到第100个。由此可知,只要满足乙取到的数同甲取得数的和满足6到10即可。可以保证甲第一次取后剩下的球的个数为6到10之间数的整数倍。甲以后每次采取的策略就是要保证同该次乙所取球的个数之和为6到10之间你所选得那个数,甲必然取到第100个球。要使进行严密的逻辑要复杂些。下边是我自己编写的C语言实现代码,其中要有一些小的毛病,但大体上的逻辑还正确。
运行环境VC6.0
#include <stdio.h>
void main()
{
int m;
void fun1();
void fun2();
void fun3();
void fun4();
void fun5();
printf("请输入甲第一次要取得球的个数:");
scanf("%d",&m);
switch (m)
{
case 1: fun1();
case 2: fun2();
case 3: fun3();
case 4: fun4();
case 5: fun5();
default: printf("所取球的个数违反游戏规则!");
}
}
void fun1()
{
int i,j,t;
int s1=1;
int s2=0;
int a[15],b[15];
for(i=6;i<=10;i++)
{