现在的位置: 首页 > 综合 > 正文

基于visual Studio2013解决C语言竞赛题之1083人机博弈

2014年02月16日 ⁄ 综合 ⁄ 共 2040字 ⁄ 字号 评论关闭





题目

解决代码及点评



/************************************************************************/
/* 
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)新建工程

抱歉!评论已关闭.