一个简单数学小游戏C语言代码
来源:互联网 发布:汽车保值率算法 编辑:程序博客网 时间:2024/06/04 19:15
假设排列着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++)
{
if(99%i==0)
t=i;
}
for(j=0;j<(99/t);j++)
{
printf("乙方取得的球的个数:");
scanf("%d",&b[j]);
a[j]=t-b[j];
printf("甲方取得的球的个数:%d/n",a[j]);
//确定每次所取球的最后一个编号
s2=s1+b[j];
s1=s1+b[j]+a[j];
printf("甲该次所取的最后一个球的编号为:%d/n",s1);
printf("乙该次取得的最后一个球的编号为:%d/n",s2);
if(s1==100)
printf("甲方获得胜利!");
printf("/n");
}
}
void fun2()
{
int i,j,t;
int s1=2;
int s2=0;
int a[15],b[15];
for(i=6;i<=10;i++)
{
if(98%i==0)
t=i;
}
for(j=0;j<(98/t);j++)
{
printf("乙方取得的球的个数:");
scanf("%d",&b[j]);
a[j]=t-b[j];
printf("甲方取得的球的个数:%d/n",a[j]);
//确定每次所取球的最后一个编号
s2=s1+b[j];
s1=s1+b[j]+a[j];
printf("甲该次所取的最后一个球的编号为:%d/n",s1);
printf("乙该次取得的最后一个球的编号为:%d/n",s2);
if(s1==100)
printf("甲方获得胜利!");
printf("/n");
}
}
void fun3()
{
int j;
int s1=3;
int s2=0;
int a[50],b[50];
for(j=0;j<50;j++)
{
printf("请输入乙要取得球的个数:");
scanf("%d",&b[j]);
if(b[j]<0 && b[j]>5)
printf("输入错误!");
printf("请输入甲要取得球的个数:");
scanf("%d",&a[j]);
if(b[j]<0 && a[j]>5)
printf("输入错误!");
printf("/n");
s2=s1+b[j];
s1=b[j]+a[j]+s1;
if(s1>=100)
{
s1=100;
printf("甲该次所取的最后一个球的编号为:%d/n",s1);
printf("甲方获得胜利!/n");
continue;
}
else
{
printf("甲该次所取的最后一个球的编号为:%d/n",s1);
printf("/n");
}
if(s2>=100)
{
s2=100;
printf("乙该次所取的最后一个球的编号为:%d/n",s2);
printf("乙方获得胜利!/n");
continue;
}
else
{
printf("乙该次取得的最后一个球的编号为:%d/n",s2);
printf("/n");
}
}
}
void fun4()
{
int i,j,t;
int s1=4;
int s2=0;
int a[15],b[15];
for(i=6;i<=10;i++)
{
if(96%i==0)
t=i;
}
for(j=0;j<(96/t);j++)
{
printf("乙方取得的球的个数:");
scanf("%d",&b[j]);
a[j]=t-b[j];
printf("甲方取得的球的个数:%d/n",a[j]);
//确定每次所取球的最后一个编号
s2=s1+b[j];
s1=s1+b[j]+a[j];
printf("甲该次所取的最后一个球的编号为:%d/n",s1);
printf("乙该次取得的最后一个球的编号为:%d/n",s2);
if(s1==100)
printf("甲方获得胜利!");
printf("/n");
}
}
void fun5()
{
int j;
int s1=5;
int s2=0;
int a[50],b[50];
for(j=0;j<50;j++)
{
printf("请输入乙要取得球的个数:");
scanf("%d",&b[j]);
if(b[j]<0 && b[j]>5)
printf("输入错误!");
printf("请输入甲要取得球的个数:");
scanf("%d",&a[j]);
if(b[j]<0 && a[j]>5)
printf("输入错误!");
printf("/n");
s2=s1+b[j];
s1=b[j]+a[j]+s1;
if(s1>=100)
{
s1=100;
printf("甲该次所取的最后一个球的编号为:%d/n",s1);
printf("甲方获得胜利!/n");
continue;
}
else
{
printf("甲该次所取的最后一个球的编号为:%d/n",s1);
printf("/n");
}
if(s2>=100)
{
s2=100;
printf("乙该次所取的最后一个球的编号为:%d/n",s2);
printf("乙方获得胜利!/n");
continue;
}
else
{
printf("乙该次取得的最后一个球的编号为:%d/n",s2);
printf("/n");
}
}
}
其中有两个地方不够完美,1,在甲第一次取4个球后,剩下96个,在此6到10被其整除的数有6和8两个数。用for循环由于第一次找到的6在又找到8后被覆盖掉。因此在此少了6这种情况的逻辑分析。2.在找不到可除6到10得整数的这种情况中,由于无法确定循环次数,因此设置循环次数最大量为50,而当球的个数超过100个还算是控制了这一因素,可是却无法跳出整个循环。在这一部分还需要改进。
- 一个简单数学小游戏C语言代码
- 简单的C语言猜数字小游戏
- 简单c语言小游戏实现原理
- C语言简单实现扫雷小游戏~~~
- c语言简单小游戏(模拟魔塔)
- 扫雷小游戏c语言简单版
- C语言实现简单的三子棋小游戏
- 小游戏三子棋的C语言代码实现
- C语言写的一个2048小游戏
- C语言简单键盘扫描,可用于简单小游戏
- 用C语言实现一个简单的计算器代码
- 一个简单的小游戏
- 一个简单JS小游戏
- 利用c语言做简单的迷宫小游戏
- 用C语言实现简单的三子棋小游戏
- 简单小游戏-剪刀石头布的c语言实现
- 粤嵌arm开发版2048小游戏c语言代码
- C语言小游戏源代码
- 使用 Apache MINA 2 开发网络应用
- java面试笔试题:同步和异步有何异同
- 问题集锦(30-35)
- 存储引擎揭秘:基本结构之五——GAM、SGAM、PFS和其他分配映射页
- 转载几篇关于java读写及验证xml的文章(一、How to create XML file in Java )
- 一个简单数学小游戏C语言代码
- uboot中C语言代码入口函数(start_armboot)的注释
- pku 1321 棋盘问题
- [不看后悔啊!]史上最为全面的Autocad施工图视频教程 看完就能成为装修设计师 http://www.51zxw.net/study.asp?vip=1573837
- 老子不想耍流氓了,老子要跟你结婚
- 我是一条小河
- Sql Server添加一条记录后获取自增的ID
- Android 手机应用开发经验 之 通过Socket(TCP/IP)与PC通讯
- open/read/write和fopen/fread/fwrite的区别