欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

五子棋

程序员文章站 2022-06-14 11:02:23
...

2014年北航机试第二题-五子棋

题目描述
输入一个19*19的矩阵,只包含数字0,1,2。0表示空格,1、2表示两个人的棋子。
要求判断是否有人获胜(横向或竖向或斜向是否连成五个同色棋子)
题目说明输入样例保证每条线上至多只有连线5个同色棋子,并且保证至多只有1人获胜。
如果有人获胜,输出获胜者1或2,加一个冒号,接着输出获胜的五连珠的第一个棋子的坐标,从上到下从左到右序号最小的为第一个,序号从1开始编号。如果无人获胜,输出No。
输入
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0

输出 No
其它案例自行修改
C代码

#include<stdio.h>
int judge(int qipan[19][19]){
	int i, j, t;
	for (i = 0; i<19; i++){
		for (j = 0; j<19; j++){
			if (qipan[i][j] != 0){
				t = qipan[i][j];
				if (j<19 - 4){//判断横向上是否连成五个
					if (t == qipan[i][j + 1] && t == qipan[i][j + 2] && t == qipan[i][j + 3] && t == qipan[i][j + 4]){
						printf("%d:(%d,%d)\n", t, i, j);
						return t;
					}
				}
				if (i<19 - 4){//判断纵向上是否连成五个
					if (t == qipan[i + 1][j] && t == qipan[i + 2][j] && t == qipan[i + 3][j] && t == qipan[i + 4][j]){
						printf("%d:(%d,%d)\n", t, i, j);
						return t;
					}
				}
				if (i<19 - 4 && j<19 - 4){//判断右下方是否连成五个
					if (t == qipan[i + 1][j + 1] && t == qipan[i + 2][j + 2] && t == qipan[i + 3][j + 3] && t == qipan[i + 4][j + 4]){
						printf("%d:(%d,%d)\n", t, i, j);
						return t;
					}
				}
				if (i<19 - 4 && j>3){//判断左下方是否连成五个
					if (t == qipan[i + 1][j - 1] && t == qipan[i + 2][j - 2] && t == qipan[i + 3][j - 3] && t == qipan[i + 4][j - 4]){
						printf("%d:(%d,%d)\n", t, i, j);
						return t;
					}
				}
			}
		}
	}
	return 0;
}

int main(){
	int qipan[19][19];
	int i = 0, j = 0, res = 0;
	for (i = 0; i<19; i++){
		for (j = 0; j<19; j++){
			scanf("%d", &qipan[i][j]);
		}
	}	
	res = judge(qipan);
	if (res == 0){
		printf("no\n");
	}
	return 0;
}