基于visual Studio2013解决C语言竞赛题之1083人机博弈
题目
解决代码及点评
/************************************************************************/
/*
83. 人机搏弈。
有15颗棋子,你和计算机轮流取,每次只允许取1─3颗,直到取尽为止,谁手中的棋子总数为奇数者为赢。
先由键盘输入来确定计算机先取还是你先取。
提示:取胜者秘诀是:第一次先取两颗,以后按下边规则进行:
1) 刚取的棋子数如果和已取得的棋子数加起来是个奇数,那么剩下的棋子数必须是1或8或9;
2) 刚取的棋子数如果和已取得的棋子数加起来是个偶数,那么剩下的棋子数必须是4或5。
思考: n颗棋子时,程序应如何修改? */
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h> void main()
{
const int N=15; int num=N;
int numw=0;
int numd=0;
int who=0;
printf("请选择游戏选项 1 代表计算机先取 2,代表玩家先取\n");
scanf_s("%d",&who);
if (who==1)
{
int temp=rand()%3+1;
numd+=temp;
num-=temp;
printf("计算机选择了%d\n",temp);
while(num>1)
{
scanf_s("%d",&temp);
if (temp!=1&&temp!=2&&temp!=3)
{
printf("谁让你乱按的!!");
goto loop;
}
else
{
if (num<temp)
{
printf("谁让你乱按的!!");
goto loop;
}
else
{
num-=temp;
numw+=temp;
printf("现在还剩%d张牌",num); } }
if (num==0)
{
if (numw%2)
{
printf("玩家赢了\n");
}
else
{
printf("电脑赢了\n");
}
goto loop;
}
else if (num==1)
{
if (numw%2)
{
printf("玩家赢了\n");
}
else
{
printf("电脑赢了\n");
}
numd+=1; goto loop;
}
if (num>1)
{
int temp1=rand()%3+1;
if (temp1>num)
{
temp=num;
}
numd+=temp;
printf("电脑选择%d\n",temp1);
num-=temp1;
printf("现在还剩%d张牌",num);
} }
if (num==0)
{
if (numw%2)
{
printf("玩家赢了\n");
}
else
{
printf("电脑赢了\n");
}
goto loop;
}
else if (num==1)
{ numw+=1;
if (numw%2)
{
printf("玩家赢了\n");
}
else
{
printf("电脑赢了\n");
};
goto loop;
} }
else if (who==2)
{
int temp;
while(num>1)
{
scanf_s("%d",&temp);
if (temp!=1&&temp!=2&&temp!=3)
{
printf("谁让你乱按的!!");
goto loop;
}
else
{
if (num<temp)
{
printf("谁让你乱按的!!");
goto loop;
}
else
{
num-=temp;
numw+=temp;
printf("现在还剩%d张牌",num); } }
if (num==0)
{
if (numw%2)
{
printf("玩家赢了\n");
}
else
{
printf("电脑赢了\n");
}
goto loop;
}
else if (num==1)
{
if (numw%2)
{
printf("玩家赢了\n");
}
else
{
printf("电脑赢了\n");
}
numd+=1; goto loop;
}
if (num>1)
{
int temp1=rand()%3+1;
if (temp1>num)
{
temp=num;
}
numd+=temp;
printf("电脑选择%d\n",temp1);
num-=temp1;
printf("现在还剩%d张牌",num);
} }
if (num==0)
{
if (numw%2)
{
printf("玩家赢了\n");
}
else
{
printf("电脑赢了\n");
}
goto loop;
}
else if (num==1)
{ numw+=1;
if (numw%2)
{
printf("玩家赢了\n");
}
else
{
printf("电脑赢了\n");
};
goto loop;
} }
else
{
printf("谁让你乱按的!!");
} loop: system("pause");
}
代码编译以及运行
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行
程序运行结果
代码下载
http://download.csdn.net/detail/yincheng01/6681845
解压密码:c.itcast.cn
基于visual Studio2013解决C语言竞赛题之1083人机博弈的更多相关文章
- 基于visual Studio2013解决C语言竞赛题之0401阶乘
题目 解决代码及点评 这个是一道经典的教科书题目,基本上每本基础的c/c++语言教科书都会有这个题目 用来演示循环语句 #include <stdio.h> #include ...
- 基于visual Studio2013解决C语言竞赛题之0205位数求和
题目
- 基于visual Studio2013解决C语言竞赛题之0201温度转换
题目 解决代码及点评 #include <stdio.h> #include <stdlib.h> void main() { float f; float c; float ...
- 基于visual Studio2013解决C语言竞赛题之0409 100以内素数
题目 解决代码及点评 在已经知道素数是怎么判断的基础上,增加循环,可以判断出100以内的素数 /******************************************* ...
- 基于visual Studio2013解决C语言竞赛题之0408素数
题目 解决代码及点评 判断一个数是不是素数的方法,一般是看n是不是能被n以内的某个整数(1除外)整除 为了提高效率,这个整数范围一般缩小到n的平方根 如果在这个范围内的整数都不能整除,那么 ...
- 基于visual Studio2013解决C语言竞赛题之0407最大值最小值
题目 解决代码及点评 这道题考察循环和比较 /*********************************************************************** ...
- 基于visual Studio2013解决C语言竞赛题之0406数列求和
题目 解决代码及点评 这个题目,还是考察for循环的使用 以及数列规律,该数列的特点是第n个分子 = 第n-1个分子 + 第n-2个分子,分母也是此规律 而另外一个规律是第n个分子和第n- ...
- 基于visual Studio2013解决C语言竞赛题之0405阶乘求和
题目 解决代码及点评 这道题和上一道题类似,第n个累加项 = n-1累加项的n倍 由于有这个规律,我们可以用一个for循环实现 但是例子代码并没有这么做,大家可以回去修改下代码,使得代码更 ...
- 基于visual Studio2013解决C语言竞赛题之0404循环求和
题目 解决代码及点评 这道题考验for循环和一个简单的算法 因为每次累加的值有规律,后面一次累加是前面一次累加的两倍 所以可以用简单的循环,计算累加项和累加结果 /************ ...
随机推荐
- hadoop源代码解读namenode高可靠:HA;web方式查看namenode下信息;dfs/data决定datanode存储位置
点击browserFilesystem,和命令查看结果一样 当我们查看hadoop源代码时,我们看到hdfs下的hdfs-default.xml文件信息 我们查找${hadoop.tmp.dir}这是 ...
- 一个简单的mfc单页界面文件读写程序(MFC 程序入口和执行流程)
参考:MFC 程序入口和执行流程 http://www.cnblogs.com/liuweilinlin/archive/2012/08/16/2643272.html 程序MFCFlie ...
- Identifiers
Identifier An identifier is an arbitrarily long sequence of digits, underscores, lowercase and upper ...
- xzzx
创建包: CREATE OR REPLACE PACKAGE WYL_TEST_PKG_GGYW_XZZX IS -- Purpose : 公共业务-参保险种注销 --注销选择的险种,并将参保缴费信息 ...
- fastxml Jackson JsonNode (ObjectNode) 转 List
做环聊开发, Java 后台示例 用的 fastxml Jackson 解析json(擦, 狗屎, 不能支持下国产吗?) 有的json字段是数组, 发现不会解析了, 谷歌了下, 用以下方法可行,(不知 ...
- 将 jsp 页面的值 传到struts2 action中(不是表单中的值)
JSP: 页面: <%@ page language="java" pageEncoding="GBK"%> <%@taglib prefi ...
- struts2总结【转载】
1,struts2的form表单里面和url里面的传值以及Action所继承的父类都可以自动set属性注入action中,及继承的action中. 2,凡是url和form表单传值,在action方法 ...
- 基于visual Studio2013解决C语言竞赛题之0412水仙花数
题目 解决代码及点评 按照题目要求,3位数是从100~999,那么我们设计一个for循环遍历所有三位数 对每个三位数进行水仙花数的判断即可 /******************** ...
- 基于visual Studio2013解决C语言竞赛题之0501挑选素数
题目
- [置顶] 如何判断两个IP大小关系及是否在同一个网段中
功能点 判断某个IP地址是否合法 判断两个IP地址是否在同一个网段中 判断两个IP地址的大小关系 知识准备 IP协议 子网掩码 Java 正则表达式 基本原理 IP地址范围 0.0.0.0- 255 ...