賓果遊戲 A, B 兩位玩家玩賓果遊戲

賓果遊戲
A, B 兩位玩家玩賓果遊戲,每位玩家各自輸入一個 N×N的矩陣,從 數字從 1N×N,
假設 N=3接著從 1
N×N 的數字選擇 M 個數字,其中 1<=M<N×N。
例如 M=4,四個數字是 6, 1, 7, 3。則 A, B 玩家的矩陣分別為:
6 1 8 9 6 4
4 7 2 5 1 8
5 9 3 2 7 3
輸入到7時,B玩家先達成1條連線,A玩家還沒連線,因此 B 玩家獲勝。
判斷勝負:

  1. M 個數字依序出現在任一玩家矩陣中連成一條對角線、垂直線,或水平線,先連成線的玩家獲勝。
  2. 若兩位玩家同時連線,或都沒有連線,則平手。

輸入說明 輸出說明
Line 1, 整數 N M
Line 2, A的 N×N 個數字
Line 3, B 的 N×N 個數字
Line 4, M 個數字
A玩家獲勝,輸出A Win
B玩家獲勝,輸出 B Win
平手輸出 Tie

Sample Input 1: B Win
3 4
6 1 8 4 7 2 5 9 3
9 6 4 5 1 8 2 7 3
6 1 7 3
Sample Output 1:
B Win

Sample Input 2: A Win
3 7
1 2 3 4 5 6 7 8 9
2 3 4 5 1 6 9 7 8
7 2 3 6 9 8 4
Sample Output 2:
A Win

Sample Input 3:A, B 同時連線
3 5
1 2 3 4 5 6 7 8 9
5 7 4 6 8 2 1 9 3
1 2 5 4 8
Sample Output 3:
Tie

Sample Input 4:A, B 皆未連線
4 8
16 6 11 5 10 4 13 3 14 15 9
12 7 2 8 1
8 1 3 11 12 5 14 9 13 4 6 2
15 16 7 10
9 1 3 5 7 8 10 13
Sample Output 4:
Tie

你题目的解答代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define N 100

int mp(int a[N][N], int c[], int n,int m)
{
    int k,i,j;
    for(k=0;k<=m-n;k++)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
                if (a[i][j] != c[k+j])
                    break;
            if (j==n)
                return 1;
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
                if (a[j][i] != c[k+j])
                    break;
            if (j==n)
                return 1;
        }
        for(j=0;j<n;j++)
            if (a[j][j] != c[k+j])
                break;
        if (j==n)
            return 1;
        for(j=0;j<n;j++)
            if (a[j][n-1-j] != c[k+j])
                break;
        if (j==n)
            return 1;
    }
    return 0;
}
int main() {
    int a[N][N];
    int b[N][N];
    int i,j,n,m,d1,d2;
    scanf("%d%d", &n, &m);
    int c[m];
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            scanf("%d", &a[i][j]);
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            scanf("%d", &b[i][j]);
    for(i=0;i<m;i++)
        scanf("%d", &c[i]);
    d1 = mp(a, c, n, m);
    d2 = mp(b, c, n, m);
    if (d1==1 && d2==0)
        printf("A Win\n");
    else if (d1==0 && d2==1)
        printf("B Win\n");
    else
        printf("Tie\n");
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632