22.(取奇数游戏) 该游戏规则如下: 操作者先输入一个奇数 N(<200)表示N个石
子. 设计算机为 A 方,操作者为 B 方, 双方轮流取石子,每次取1-3个. 最后取
到石子总数为奇数的一方获胜. 编制程序使计算机有较多的获胜机会,
下面是操作者先取的代码:
#include<iostream>
using namespace std;
void main()
{
int A=0,B=0,C=2; //A电脑,B人,C总数
int i,k;
while(C%2==0||C<0) //输入一个大于零的奇数
{
cout<<"请输入一个大于零的奇数:";
cin>>C;
}
while(C>0)
{
k=0;
while(k>3||k<1||k>C) //取小于等于3大于0且最的数不能比剩下的数大
{
cout<<"B:";
cin>>k;
}
C-=k;
B+=k;
cout<<"A:"<<A<<"\tB:"<<B<<"\tC:"<<C<<endl<<endl; //显示B取后结果
k=A; //保存A,后面显示A的所取数量用
if(C>=4) //A取算法,A取所剩数与4的余数(如,剩7,则A取3,剩4)
{
i=C%4;
if(i!=0)
{
A+=i;
C-=i;
}
else //剩数与4余数为0,A取1
{
A++;
C--;
}
}
else if(C<4) //C小于4,A的不同取法
{
switch(C)
{
case 1:A++;C--;break; //C剩1时取数
case 2:A+=B%2!=0?(C--,1):(C-=2,2);break; //C为2时,B为奇偶不同取法
case 3:A+=B%2!=0?(C-=2,2):(C-=3,3);break; //C为3时,B为奇偶不同取法
}
}
cout<<"A:"<<A-k<<endl; //显示A取后结果
cout<<"A:"<<A<<"\tB:"<<B<<"\tC:"<<C<<endl<<endl;
}
if(A%2==0) //判断胜负
cout<<"B 获胜!"<<endl;
else
cout<<"A 获胜!"<<endl;
}