C语言中矩阵旋转段错误

一种C语言矩阵旋转但是有的答案一直segmentation fault段错误找不到问题
Input
有多组输入。
每组输入先输入一个整数N(N <= 50),代表矩阵的大小。
接下来的N行,每行有N个整数。代表矩阵A。
再接下来的N行N个整数代表矩阵B。

Output
如果矩阵A在旋转一定角度后能和矩阵B完全一样则输出YES,否则输出NO。

#include
int main()
{
    int N,a[50][50],b[50][50],i,j,k,s,t=0;
    while(scanf("%d",&N)!=EOF)
    {
        for(i=0;ifor(j=0;j"%d",&a[i][j]);
            }
        }
        for(i=0;ifor(j=0;j"%d",&b[i][j]);
            }
        }
        for(k=1;k<4;k++)
        {
            for(j=0;jfor(i=N-1;i>=0;i--)
                {
                    if(a[i][j]==b[t][j])
                        s++;
                    t++;
                }
            }
            if(s==N*N)
                break;
        }
        if(k<4)
            printf("YES");
        else
            printf("NO");
    }
}

真不知道这段错误是什么,唔。

望采纳。你的代码中存在一些问题。

  • 首先,你没有在循环之前将变量 t 设为 0。这导致在比较矩阵元素的值时会出现问题,因为 t 的值在每次循环结束后都会保留。你需要在循环之前将变量 t 设为 0。
  • 其次,在每次循环开始时,你需要将变量 s 设为 0。这是因为你在比较矩阵元素的值时,如果遇到的元素值相同,就会将 s 的值加 1。但是你没有在每次循环开始时将变量 s 设为 0,因此会导致比较的结果不准确。
  • 最后,你在比较矩阵元素的值时,将变量 t 的值加 1,但是你没有将变量 t 的值恢复为 0。这也会导致比较的结果不准确。

修改后的完整代码如下:

#include<stdio.h>

int main()
{
    int N, a[50][50], b[50][50], i, j, k, s, t;
    while (scanf("%d", &N) != EOF)
    {
        // 读入矩阵A
        for (i = 0; i < N; i++)
        {
            for (j = 0; j < N; j++)
            {
                scanf("%d", &a[i][j]);
            }
        }
        // 读入矩阵B
        for (i = 0; i < N; i++)
        {
            for (j = 0; j < N; j++)
            {
                scanf("%d", &b[i][j]);
            }
        }
        // 枚举旋转角度
        for (k = 1; k < 4; k++)
        {
            // 将变量s设为0
            s = 0;
            // 枚举矩阵B的行
            for (j = 0; j < N; j++)
            {
                // 将变量t设为0
                t = 0;
                // 枚举矩阵A的列
                for (i = N - 1; i >= 0; i--)
                {
                    // 如果矩阵A和矩阵B的对应元素相同,则将s的值加1
                    if (a[i][j] == b[t][j])
                    {
                        s++;
                    }
                    // 将t的值加1
                    t++;
                }
            }
            // 如果矩阵A和矩阵B完全一样,则退出循环
            if (s == N * N)
            {
                break;
            }
        }
        // 判断是否成功
        if (k < 4)
        {
            printf("YES");
        }
        else
        {
            printf("NO");
        }
    }
    return 0;
}

for(k=1;k<4
明明都是N,为啥是4?