五子棋(五连)
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
在五子棋对战中,我们有以下相关术语: 〖阳线〗即:直线,棋盘上可见的横纵直线。 〖阴线〗即:斜线,由交叉点构成的与阳线成45凹薪堑囊涡毕摺? 〖五连〗只有五枚同色棋子在一条阳线或阴线上相邻成一排。 〖长连〗五枚以上同色棋子在一条阳线或阴线上相邻成一排。 五连也是五子棋的胜利条件。 此题要求同学们编写程序,判断在给定点放给定颜色的子后是否会有五连这种棋型出现。
输入:
对于本题,首先读入的是当前棋盘的状态,共15行,每行15个数字,1代表白棋,2代表黑棋,0代表为空格(未下子)。第16行有3个数字R,C,N代表给定点的行、列和放子的颜色。
输出:
若出现则输出Yes,否则输出No.
输入样例:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0 2 2 0 0 1
0 2 2 2 0 0 0 0 2 0 0 0 0 0 1
0 1 0 1 1 0 2 0 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 2 0 0 1 0 0 0
2 0 0 0 0 1 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 1 0 1 0 0 0
2 0 0 0 0 0 0 1 0 0 0 0 0 0 0
2 0 0 0 0 0 0 2 1 0 0 0 0 1 0
0 0 0 0 0 0 2 2 0 0 0 0 1 0 0
2 0 0 0 0 2 0 0 0 0 0 1 0 0 0
0 2 0 1 1 0 0 2 0 0 0 0 0 0 0
0 0 2 0 0 0 0 0 0 1 0 0 0 0 0
0 2 2 2 2 0 0 0 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
14 4 1
输出样例:
Yes
提示:
注意阴线,阳线一起判断。 长连和五连的区分
#include<stdio.h> int main() { int i,j,k=0,count[4]={0}; int R,C,N; int Arr[15][15]={0}; for(i=0;i<15;i++) for(j=0;j<15;j++) scanf("%d",&Arr[i][j]); scanf("%d%d%d",&R,&C,&N); Arr[R][C]=N; for(j=C;j<15;j++)//横向 if(Arr[R][j]==Arr[R][C]) count[0]++; else break; for(j=C-1;j>=0;j--) if(Arr[R][j]==Arr[R][C]) count[0]++; else break; for(i=R;i<15;i++)//纵向 if(Arr[i][C]==Arr[R][C]) count[1]++; else break; for(i=R-1;i>=0;i--) if(Arr[i][C]==Arr[R][C]) count[1]++; else break; for(i=R,j=C;i>=0,j>=0;i--,j--)//斜左 if(Arr[i][j]==Arr[R][C]) count[2]++; else break; for(i=R+1,j=C+1;i<15,j<15;i++,j++) if(Arr[i][j]==Arr[R][C]) count[2]++; else break; for(i=R,j=C;i>=0,j<15;i--,j++)//斜右 if(Arr[i][j]==Arr[R][C]) count[3]++; else break; for(i=R+1,j=C-1;i<15,j>=0;i++,j--) if(Arr[i][j]==Arr[R][C]) count[3]++; else break; if(count[0]==5||count[1]==5||count[2]==5||count[3]==5) printf("Yes\n"); else printf("No\n"); return 0; }