一个简单数学小游戏C语言代码

这篇博客讨论了一个两人轮流拿球的游戏,目标是拿到第100个乒乓球。如果甲先拿球,通过分析发现,只要甲确保每次取球与乙取球之和为6到10之间,就能保证获胜。博主提供了C语言代码实现,包括不同起始数量的策略函数,并指出代码中的两个问题:一是甲取4个球后,可能错过6的整数倍情况;二是当无法找到6到10的整数倍时,循环控制不准确。
摘要由CSDN通过智能技术生成

假设排列着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++)
   {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值