由两个人玩“抢30”游戏,游戏规则是:第一个人先说“1”或“2”,第二个人要接着往下说一个或两个数,然后又轮到第一个人,再接着往下说一个或两个数。这样两人反复轮流,每次每个人说一个或两个数都可以,但是不可以连说三个数,谁先抢到30,谁得胜。
问题分析:
通过观察可知谁先抢说27谁就会赢。要抢到27,必须先抢到24。依次类推变为抢3的问题
只要第二个人控制抢到27 24 21 18 15 12 9 6 3则一定会赢
所以可知这个游戏是不公平的,偏向后开口的人,而且这些数字都能整模3
假设变为“抢50”游戏规则不变,47 44 41 38 35 32 29 26 23 20 17 14 11 8 5 2
变成抢2的游戏,也是不公平的,偏向先开口的人。而且这些数字模3都等于2
#include
#include
#include
void menu();
int people(int t);//人抢数
int computer(int s);//电脑抢数
int main()
{
srand((unsigned)time(NULL));//用时间戳给rand初始值
int tol = rand() % 30 + 1;//从1到30的某个数开始抢数
menu();
printf(" <%d> n", tol);
//公平起见用产生的随机值决定谁先抢数
if (rand() % 2 == 1)
{
tol = people(tol);//rand产生的值模2余1,则人先抢数
}
while (tol!=30)
{
//电脑和人谁先抢到30谁赢
if ((tol = computer(tol)) == 30)
printf("电脑赢n");
else if((tol=people(tol))==30)
printf("人赢n");
}
printf(" 游戏结束 n");
return 0;
}
//人抢数
int people(int t)
{
int a;
while (1)
{
printf("人的抢数为:");
scanf("%d", &a);
if (a > t + 2 || a < t + 1)
printf("请按抢数规则抢数,");
else
break;
}
return a;
}
//电脑抢数
int computer(int s)
{
int c;
printf("电脑抢数为:");
if ((s + 1) % 3 == 0)
printf(" %dn", ++s);
else if ((s + 2) % 3 == 0)
{
s += 2;
printf(" %dn", s);
}
else
{
c = rand()%2 + 1;
s += c;
printf(" %dn", s);
}
return s;
}
//菜单
void menu()
{
printf("************************************n");
printf(" <抢30游戏> n");
printf(" 电脑与人一起抢数谁先抢到30谁赢 n");
printf(" 游戏规则如下: n");
printf(" 1.人的抢数不能超过给定抢数+2的值 n");
printf(" 2.人的抢数不能超过电脑抢数+2的值 n");
printf(" 3.系统给定随机值< >开始抢数游戏 n");
printf(" 游戏开始 n");
printf("************************************n");
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)