五子棋(五连)

时限: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;
}

 

 

原文地址:https://www.cnblogs.com/IThaitian/p/2584449.html