已知两人分别执白棋和黑棋在一个围棋棋盘上下五子棋,若同一颜色的棋子在同一条横行、纵行或斜线上连成5个棋子,则执该颜色棋子的人获胜。编写程序读入某一时刻下棋的状态,并判断是否有人即将获胜,即:同一颜色的棋子在同一条横行、纵列或斜线上连成4个棋子,且该4个棋子的两端至少有一端为空位置。 输入的棋盘大小是19×19,用数字0表示空位置(即没有棋子),用数字1表示该位置下了一白色棋子,用数字2表示该位置下了一黑色棋子。假设同一颜色的棋子在同一条横行、纵列或斜线上连成的棋子个数不会超过4个,并且最多有一人连成线的棋子个数为4。 【输入形式】 从控制台输入用来表示棋盘状态的数字0、1或2;每行输入19个数字,各数字之间以一个空格分隔,每行最后一个数字后没有空格;共输入19行表示棋盘状态的数字。 【输出形式】 若有人即将获胜,则先输出即将获胜人的棋子颜色(1表示白色棋子,2表示黑色棋子),然后输出英文冒号:,最后输出连成4个棋子连线的起始位置(棋盘横行自上往下、纵列自左往右从1开始计数,横行最小的棋子在棋盘上的横行数和纵列数作为连线的起始位置,若在同一行上,则纵列数最小的棋子位置作为起始位置,两数字之间以一个英文逗号,作为分隔符)。 若没有人获胜,则输出英文字符串:No。 无论输出什么结果,最后都要有回车换行符
时间: 2024-03-14 15:43:40 浏览: 238
好的,以下是Python的代码实现:
```python
board = []
for i in range(19):
row = input().strip().split()
row = [int(x) for x in row]
board.append(row)
# 横向检查
for row in range(19):
for col in range(16):
if board[row][col] == board[row][col+1] == board[row][col+2] == board[row][col+3]:
if col == 0 or board[row][col-1] != board[row][col]:
print(board[row][col], end=':')
print(row+1, col+1)
exit()
# 纵向检查
for col in range(19):
for row in range(16):
if board[row][col] == board[row+1][col] == board[row+2][col] == board[row+3][col]:
if row == 0 or board[row-1][col] != board[row][col]:
print(board[row][col], end=':')
print(row+1, col+1)
exit()
# 右上斜向检查
for row in range(3, 19):
for col in range(16):
if board[row][col] == board[row-1][col+1] == board[row-2][col+2] == board[row-3][col+3]:
if col == 0 or row == 3 or board[row+1][col-1] != board[row][col]:
print(board[row][col], end=':')
print(row+1, col+1)
exit()
# 左上斜向检查
for row in range(3, 19):
for col in range(3, 19):
if board[row][col] == board[row-1][col-1] == board[row-2][col-2] == board[row-3][col-3]:
if row == 3 or col == 3 or board[row+1][col+1] != board[row][col]:
print(board[row][col], end=':')
print(row+1, col+1)
exit()
print('No')
```
首先,我们使用一个循环读取从控制台输入的棋盘状态,将其存储在一个二维数组`board`中。接着,我们分别对横向、纵向、右上斜向和左上斜向进行检查。对于每种情况,我们使用两个嵌套循环遍历棋盘,如果发现有4个相同颜色的棋子相连,则检查两端是否为空位置。如果两端至少有一端为空位置,则输出即将获胜人的棋子颜色和连线的起始位置,并使用`exit()`函数结束程序。如果没有发现任何人即将获胜,则输出字符串"No"。
需要注意的是,棋盘横行自上往下、纵列自左往右从1开始计数,而程序中的二维数组`board`的行列索引都是从0开始计数。因此,在输出连线的起始位置时,需要将行列索引加1。
阅读全文