面试题

题目要求:

用自己熟悉的语言编写一个函数:输入是一个n*n的二维数组。该数组可以看做是一个五子棋的棋盘。其中某个元素为1代表该位置摆放的是黑子,-1表示白子,0表示没有任何棋子。函数的返回值是判断该五子棋盘的状态,一共三种可能:黑棋赢、白棋赢、不分胜负。其中某一种颜色的棋子在横线、竖线、或斜线方向超过5个子即为胜利。

程序详细代码:

#include <iostream>
using namespace std;

int len = 0;
bool falg = true;
int main()
{
int pos[6][6] =
{-1,1,-1,1,-1,1,
1,-1,1,-1,1,-1,
-1,-1,-1,1,1,-1,
1,-1,-1,-1,-1,1,
1,1,-1,1,1,1,
1,-1,1,1,1,1
};

for(int c = 0; c < 6 ; c++)
{
for(int r=0; r < 6; r++)
{
if(pos[c][r] == 0)
continue;

//纵向棋子相同
if(pos[c][r] == pos[c][r+1])
{
if(r < 2)
{
for(int i = 1; i <= 4; i++ )
{
if(pos[c][r+i] == pos[c][r+i+1])
len++;
else
{
break;
len = 0;
}
}
}else
{
continue;
}


if(len >= 5)
{
if(pos[c][r] == 1)
cout << "黑子获胜!" << endl;
else if(pos[c][r] == -1)
cout << "白子获胜!" << endl;
return 0;
}
}

//横向棋子相同
if(pos[c][r] == pos[c+1][r])
{
if(c < 2)
{
for(int i = 1; i <= 4; i++ )
{
if(pos[c+i][r] == pos[c+i+1][r])
len++;
else
{
break;
len = 0;
}
}
}
else
{
continue;
}


if(len >= 5)
{
if(pos[c][r] == 1)
cout << "黑子获胜!" << endl;
else if(pos[c][r] == -1)
cout << "白子获胜!" << endl;
return 0;
}
}

//斜向下棋子相同
if(pos[c][r] == pos[c+1][r+1])
{
if(c < 2 && r < 2)
{
for(int i = 1; i <= 4; i++ )
{
if(pos[c+i][r+i] == pos[c+i+1][r+i+1])
len++;
else
{
break;
len = 0;
}
}
}
else
{
continue;
}


if(len >= 5)
{
if(pos[c][r] == 1)
cout << "黑子获胜!" << endl;
else if(pos[c][r] == -1)
cout << "白子获胜!" << endl;
return 0;
}
}

//斜向上棋子相同
if(pos[c][r] == pos[c+1][r-1])
{
if(r < 6 && r > 4 && c < 2)
{
for(int i = 1; i <= 4; i++ )
{
if(pos[c+i][r-i] == pos[c+i+1][r-i-1])
len++;
else
{
break;
len = 0;
}
}
}else
{
continue;
}


if(len >= 5)
{
if(pos[c][r] == 1)
cout << "黑子获胜!" << endl;
else if(pos[c][r] == -1)
cout << "白子获胜!" << endl;
return 0;
}
}
}
}
}