面试算法 井字游戏 算法:暴力算法

1.题目:井字游戏
用字符串数组作为井字游戏的游戏板board,判断该游戏板有没有可能最终形成.
游戏板是一个3 x 3 数组,由字符"","X"和"O"组成。字符""代表一个空位。两个玩家轮流将字符放入空位,一个玩家执X棋,另一个玩家执O棋
“X”和“O”只允许放置在空位中,不允许对已放有字符的位置进行填充。当有3个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,board生成.
题目意思:就是看有没有人,成功的三个棋子连了一根线 



2.算法:暴力算法 


3.算法思想:暴力判断!!


4.代码:

/*************************************************
作者:She001
时间:2022/9/5
题目:井字游戏
用字符串数组作为井字游戏的游戏板board,判断该游戏板有没有可能最终形成.
游戏板是一个3 x 3 数组,由字符"","X"和"O"组成。字符""代表一个空位。两个玩家轮流将字符放入空位,一个玩家执X棋,另一个玩家执O棋
“X”和“O”只允许放置在空位中,不允许对已放有字符的位置进行填充。当有3个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,board生成.
题目意思:就是看有没有人,成功的三个棋子连了一根线 
.
算法:暴力算法 
***************************************************/

#include<bits/stdc++.h>
using namespace std;
//
//算法:暴力算法

bool fangfa_1_1(char nn[])
{
	int n=0;
	char num[3][3]={0};//二维数组, 因为 井  行和列只有 3  
	for(int i=0;i<3;i++)//一维数组,转化为二维数组 
	{
		for(int j=0;j<3;j++)
		{
			num[i][j]=nn[n];
			n++;
		}
	}
	
	for(int i=0;i<3;i++)
	{
		//一行一行的判断 
		if(num[i][0]==num[i][1])
		{
			if(num[i][1]==num[i][2])
			{
				return true;
			}
		}
		//一列一列的判断 
		if(num[0][i]==num[1][i])
		{
			if(num[1][i]==num[2][i])
			{
				return true;
			}
		}
		
	}
	
	if(num[0][0]==num[1][1])//对角线判断 
	{
		if(num[1][1]=num[2][2])
		{
			return true;
		}
	}
	
	if(num[0][2]==num[1][1])//对角线判断 
	{
		if(num[1][1]=num[2][0])
		{
			return true;
		}
	}
	
	return false; 
}


bool fangfa_1(char nn[])//nn 为一维数组,进入函数就会转发为二维数组 
{
	int n=0;
	char num[3][3]={0};//二维数组, 因为 井  行和列只有 3  
	for(int i=0;i<3;i++)//一维数组,转化为二维数组 
	{
		for(int j=0;j<3;j++)
		{
			num[i][j]=nn[n];
			n++;
		}
	}
	
	//判定 他是否 3 个棋子连成一线
	int xcount=0;//统计  x  棋子的个数 
	int ocount=0; //统计  o  棋子的个数 
	for(int i=0;i<3;i++)//统计个数 
	{
		for(int j=0;j<3;j++)
		{
			if(num[i][j]=='o')
			{
				ocount++;
			}
			if(num[i][j]=='x')
			{
				xcount++;
			}
		}
	}
	//x  下完之后就成功了   所以  xcount - ocout==1
	//o   下完之后就成功了   所以  xcount =ocout
	//假如这两种情况都不是,就是假的 
	if(xcount!=ocount &&  xcount - ocount!=1)//第一次判断 
	{
		return false;
	}
	
	//第二次判断
	int a=fangfa_1_1(nn);
	if(a==1)
	{
		return true;
	}
	else
	{
		return false;
	}	
} 







int main()
{
	/*
	int num[3][3]={
	{'x',' ','o'},
	{'x','o','x'},
	{'o','x','o'}		
	};
	*/
	char num[]={'x',' ','o','x','o','x','o','x','o'};
	char num1[]={'x','o','o','x',' ','x','o','x','o'};
	int a=fangfa_1(num);
	if(a==1)
	{
		cout<<"true"<<endl;
	}
	else
	{
		cout<<"false"<<endl;
	}
	
	int b=fangfa_1(num1);
	if(b==1)
	{
		cout<<"true"<<endl;
	}
	else
	{
		cout<<"false"<<endl;
	}
	
	return 	0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值