【华为OD】社招算法真题:四子棋连,下棋后,棋子会落到最底部,实现一行、一列或者一条对角线 上有四个相同颜色的棋子,获胜

该博客介绍了一个C++实现的四子棋游戏逻辑,包括游戏规则、异常处理以及胜利条件的检查。通过多个测试用例验证了程序的正确性,涉及棋盘状态更新、行、列和对角线的连续棋子检查。

四子棋
(游戏:四子连)四子连是一个两个人玩的棋盘游戏,在游戏 中,玩家轮流将有颜色的棋子放在一个m行n列的垂直悬挂的 网格中,如下所示。 这个游戏的目的是在对手实现一行、一列或者一条对角线 上有四个相同颜色的棋子之前,你能先做到。程序提示两个玩 家交替地下红子 Red 或黄子 Yellow。当放下一子时,程序在控 制台重新显示这个棋盘,然后确定游戏的状态(贏、平局还是 继续)。下面是一个运行示例:
输入1:
5 5
1 1 2 2 3 3 4 4
棋盘大小 5 ∗ 5 ( m ∗ n ) 5*5(m*n) 55mn
第一步,红子在1位置下棋,第二步,白子在1位置下棋,依次类推
输出1:
7,red
在第七步,红子赢了
输入2:
5 5
0 1 1 2 2 3 3 4 4
输出2 :
1,error
因为0是异常输入,不能输入0

输入3:

5 5 
1 2 3 4 2 3 3 4 5 4 4 1 2 3

输出3:
11,red
在这里插入图片描述

输入4:

5 5
1 2 3 4 2 3 3 4 5 4 5 1 2 3

输出4:
15,error

输入5:

5 4 
1 2 1 2 3 3 1 1 2 4 3 4 4

输出5:
13,red

输入5:

4 5
4 5 1 3 3 2 1 2 2 1 1

输出5:
13,red

行不通过输入
5 5
1 2 3 4 5 1 1 2 2 4 4 5 5
输出:
14,error
在这里插入图片描述
行通过输入
5 10
1 2 3 4 5 1 1 2 2 4 4 5 5 1 6 6 7 7
输出:
在这里插入图片描述

列不通过输入
5 5
3 1 3 3 3 2 3 4 5
输出:
10,error
在这里插入图片描述
列通过输入
5 5
3 1 3 2 3 4 3 5
输出:
在这里插入图片描述

左上斜角通过

5 5 
1 2 3 4 2 3 3 4 5 4 4 1 2 3

输出:
11,red
在这里插入图片描述

右上斜角通过
5 5
2 3 5 4 5 3 4 2 3 2 2
输出:
在这里插入图片描述
右上斜角不通过
5 5
2 3 5 4 5 5 4 3 1 2 1 2 2 1 2 5 1
输出:没有连续的
在这里插入图片描述

通过上述测试用例,验证正确性
c++:

#include <iostream>
#include<vector>
#include<assert.h>
using namespace std;


//竖直四子棋
vector<int>  GetWinner(int rows, int cols, vector<int> data) {
   
   
	if (rows <= 3 || cols <= 3)
	{
   
   
		assert(1); //棋盘要4个才能赢,少于3行列的棋盘,不会有赢家,所以禁止输入
	}
	vector<int> result;
	int* arr = new int[rows * cols];
	int* arrHeight = new int[cols];

	for (int i = 0; i < rows; i++)
	{
   
   
		for (int j = 0; j < cols; j++) {
   
   
			arr[i * cols + j] = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值