首页 > 试题广场 >

矩阵相等判定

[编程题]矩阵相等判定
  • 热度指数:27889 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

KiKi得到了两个nm列的矩阵,他想知道两个矩阵是否相等,请你回答他。(当两个矩阵对应数组元素都相等时两个矩阵相等)。


输入描述:

第一行包含两个整数n和m,表示两个矩阵包含n行m列,用空格分隔。

从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。

从n+2行到2n+1,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第二个矩阵中的元素。
1 < n,m < 10


输出描述:
一行,如果两个矩阵相等输出"Yes"并换行,否则输出"No"并换行。
示例1

输入

2 2
1 2
3 4
1 2
3 4

输出

Yes
int main()
{
    int n = 0;
    int m = 0;
    while (scanf("%d %d", &n, &m) == 2)
    {
        int arr1[n][m];
        int arr2[n][m];
        int i = 0;
        int j = 0;
        int flag = 0;
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
                scanf("%d", &arr1[i][j]);
        }
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
                scanf("%d", &arr2[i][j]);
        }
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
            {
                if (arr1[i][j] != arr2[i][j])
                {
                    printf("No\n");
                    goto next;
                }
            }
        }
        if (i == n )
        {
            printf("Yes\n");
        }
        next: ;
    }
    return 0;
}
发表于 2026-02-03 12:18:07 回复(0)
int main() {
	int a = 0;
	int b = 0;
	int i = 0;
	int j = 0;
	int n = 0;
	int m = 0;
	int pd = 0;
	int zhen1[20][20];
	int zhen2[20][20];
	scanf("%d %d", &n, &m);
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d", &zhen1[i][j]);
		}
	}	
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d", &zhen2[i][j]);
		}
	}

	if (n == m)
	{
		pd = 0;
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < m; j++)
			{
				if (!(zhen1[i][j] == zhen2[i][j] || zhen1[i][j] == zhen2[j][i]))
				{
					pd = 1;
					break;
				}
			}
			if (pd == 1)
			{
				break;
			}
		}
	}
	else
	{
		pd = 0;
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < m; j++)
			{
				if (zhen1[i][j] != zhen2[i][j])
				{
					pd = 1;
					break;
				}
			}
			if (pd == 1)
			{
				break;
			}
		}
	}
	if (pd == 0)
	{
		printf("Yes\n");
	}
	else
	{
		printf("No\n");
	}

	return 0;
}
先处理行列数都相等的情况,如果互为转置矩阵也要进行判断,行列不等的情况直接判断是否全部相等即可
发表于 2025-08-29 17:51:21 回复(0)
#include <stdio.h>

int main() {
    int a, b[100][100]={},n,m;
    scanf("%d %d\n",&n,&m);
    int x,y;
    for(x=1;x<=2*n;x++){
        for(y=1;y<=m;y++){
            scanf("%d",&b[x][y]);
        }
    }
    int i,j,e=0;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            if(b[i][j]!=b[n+i][j]){
               e++;
            }
        }
    }
    //printf("%d",e);
    if(e!=0){
        printf("No");

    }
    if(e==0){
        printf("Yes");
    }
    return 0;
}
发表于 2025-08-09 02:19:25 回复(0)
#include <stdio.h>

int main() {
    int n,m,tmp,flag=0;
    scanf("%d %d",&n,&m);
    int arr[n][m];
    int i = 0;
    int j = 0;
    for(i = 0;i<n;i++)
    {
        for(j = 0;j<m;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }

    for(i = 0;i<n;i++)
    {
        for(j = 0;j<m;j++)
        {
            scanf("%d",&tmp);
            if(tmp != arr[i][j])
            {
                break;
            }
            else {
                flag++;
            }
        }
        if(!flag)
            break;
    }
    if(flag == n*m)
    {
        printf("Yes\n");
    }
    else {
        printf("No\n");
    }
    return 0;
}

发表于 2025-06-20 10:18:32 回复(0)
#include <stdio.h>

int main() {
    int n,m,i,j,k,t=0;
    int sum1=0,sum2=0;
    scanf("%d%d",&n,&m);
    int a[100][100]={0};
    int b[100][100]={0};
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%d",&a[i][j]);
            sum1=sum1+a[i][j];
        }
    }
    for(int k=0;k<n;k++)
    {
        for(int t=0;t<m;t++)
        {
            scanf("%d",&b[k][t] );
            sum2=sum2+b[k][t];
        }
    }
    if(sum1-sum2==0)
    {
        printf("Yes\n");
    }
    else{
        printf("No\n");
    }
    return 0;
}
发表于 2025-02-23 18:32:48 回复(0)
#include<stdio.h>
void My_scanf(int arr[10][10],int n,int m)
{
    int i = 0;
    int j = 0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
           scanf("%d ",&arr[i][j]);
        }
    }
}
int Compare(int arr1[10][10],int arr2[10][10],int n, int m)
{
    int i = 0;
    int j = 0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
           if(arr1[i][j]!=arr2[i][j])
           {
              return 0;
           }
        }
    }
    return 1;
}
int main()
{
    int n = 0;
    int m = 0;
    scanf("%d %d",&n,&m);
    int arr1[10][10];
    int arr2[10][10];
    My_scanf(arr1,n,m);
    My_scanf(arr2,n,m);
    int ret = Compare(arr1,arr2,n,m);
    if(ret==1)
    printf("Yes\n");
    else
     printf("No\n");
    return 0;
}

发表于 2024-12-31 11:08:44 回复(0)
#include <stdio.h>

int main() 
{
    int m, n;
    scanf("%d %d", &m, &n);
    int arr1[m][n], arr2[m][n];
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++) 
        {
            scanf(" %d", &arr1[i][j]);
        }
    }
    for (int i = 0; i < m; i++) 
    {
        for (int j = 0; j < n; j++) 
        {
            scanf(" %d", &arr2[i][j]);
        }
    }
    for (int i = 0; i < m; i++) 
    {
        for (int j = 0; j < n; j++) 
        {
            if (arr1[i][j] != arr2[i][j]) 
            {
                printf("No\n");
                return 0;
            }
        }
    }
    printf("Yes\n");
    return 0;
}

发表于 2024-08-17 18:21:33 回复(0)
#include <stdio.h>

int main() {
    int a,b;
    scanf("%d%d",&a,&b);
    int arr[a+a][b+b];
    for(int i=0;i<2*a;i++)
    {
        for(int j=0;j<b;j++)
        scanf("%d",&arr[i][j]);
    }
    int c=0;
    for(int i=0;i<a;i++)
    {
        for(int j=0;j<b;j++)
        {
           if((arr[i][j]-arr[a+i][j])!=0)
           c=1;
        }
    }
    if(c==0)
    printf("Yes\n");
    else
     printf("No");
    return 0;
}
发表于 2024-08-02 20:33:40 回复(0)
#include <stdio.h>

int main() {
    int m = 0, n = 0;
    int arr1[10][10] = { 0 };
    int arr2[10][10] = { 0 };
    scanf("%d %d", &m, &n);
    int i = 0, j = 0;
    int count = 0;
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            scanf("%d", &arr1[i][j]);
        }
    }
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            scanf("%d", &arr2[i][j]);
        }
    }
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            if (arr1[i][j] == arr2[i][j])
                count++;
        }
    }
    if (count == m * n) {
        printf("Yes\n");
    } else {
        printf("No\n");
    }
    return 0;
}
发表于 2024-07-16 18:43:46 回复(0)
#include <stdio.h>

int main() {
    int n,m;
    scanf("%d %d", &n, &m);
    int a[10][10],b[10][10];
    //检查输入
    if(n >10 || m > 10)
    {
        perror("scanf-n-m fail");
        return -1;
    }

    //输入数据
    for(int i = 0; i < n; i ++)
    {
        for(int j = 0; j< m; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    for(int i = 0; i < n; i ++)
    {
        for(int j = 0; j< m; j++)
        {
            scanf("%d", &b[i][j]);
        }
    }

    //检查数据
    for(int i = 0; i < n; i ++)
    {
        for(int j = 0; j< m; j++)
        {
            //有一个不同即为不同
            if(a[i][j] != b[i][j])
            {
                printf("No\n");
                return 0;
            }
        }
    }
    printf("Yes\n");
    return 0;
}

发表于 2024-07-04 02:59:19 回复(0)
#include<stdio.h>
int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    //int a[n][m];
    // int b[n][m];
    int ab[2 * n][m];   //两个n行m列矩阵
    for (int i = 0; i < 2 * n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &ab[i][j]);
        }
    }
    int flag = 1;  //默认矩阵相等

    //遍历比较,若存在两矩阵中有元素不等,flag=0,直接结束循环
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (ab[i][j] != ab[i + n][j]) {
                flag = 0;
                break;
            }
        }
    }
    if (flag == 1)
        printf("Yes\n");
    else
        printf("No\n");
    return 0;
}
发表于 2024-05-19 21:27:03 回复(0)
#include <stdio.h>
#include <malloc.h>

int main() 
{
    int n = 0;
    int m = 0;
    int i = 0;
    int j = 0;
    int* p1 = NULL;
    int* p2 = NULL;

    scanf("%d%d", &n, &m);

    //开辟空间
    p1 = (int*)malloc(sizeof(int) * n *m);
    if(!p1)
    {
        perror("malloc:p1");
        return 1;
    }

    p2 = (int*)malloc(sizeof(int) * n * m);
    if(!p2)
    {
        perror("malloc:p2");
        return 1;
    }

    //录入数据
    for(i = 0; i < n; i++)//数列1
    {
        for(j = 0; j < m; j++)
        {
            scanf("%d", p1 + (i * m) + j);
        }
    }
    for(i = 0; i < n; i++)//数列2
    {
        for(j = 0; j < m; j++)
        {
            scanf("%d", p2 + (i * m) + j);

            //相等判断
            if(*(p2 + (i * m) + j) != *(p1 + (i * m) + j))
            {
                printf("No\n");
                goto end;
            }
        }
    }

    printf("Yes\n");

end:
    free(p1);
    free(p2);
    p1 = NULL;
    p2 = NULL;

    return 0;
}

编辑于 2024-03-20 15:56:39 回复(0)
#include <stdio.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int arr_1[n][m];
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            scanf("%d", &arr_1[i][j]);
        }
    }
    int arr_2[n][m], tag=0;
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            scanf("%d", &arr_2[i][j]);
            if(arr_2[i][j] != arr_1[i][j]){
                tag++;
                break;
            }
        }
        if(tag != 0){
            break;
        }
    }
    if(tag == 0){
        printf("Yes\n");
    }else{
        printf("No\n");
    }
    return 0;
}

编辑于 2024-02-03 11:57:44 回复(0)
#include <stdio.h>
#include<stdlib.h>
int main() {
    int m,n,a[15][15],b[15][15];
    scanf("%d %d",&m,&n);
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++)scanf("%d",&a[i][j]);//输入第一个矩阵
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&b[i][j]);//输入第二个矩阵
            if(b[i][j]!=a[i][j]){
                printf("No\n");
                exit(0);//若当前输入的值与第一个矩阵不同,则输出No,且立刻退出程序
            }
        }
    }
    printf("Yes");//若没有被判定为No,则输出Yes
    return 0;
}

编辑于 2024-01-14 09:48:30 回复(0)
#include <stdio.h>

//就是两个矩阵内容的对比
int main()
{
    int n,m=0;
    int arr[100][100];
    int acc[100][100];
    int count=0;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        //第一个矩阵
        for(int i = 0;i<n;i++)
        {
            for(int j = 0;j<m;j++)
            {
                scanf("%d",&arr[i][j]);
            }
        }
        //第二个矩阵
        for(int i = 0;i<n;i++)
        {
            for(int j = 0;j<m;j++)
            {
                scanf("%d",&acc[i][j]);
                //获取到值后跟arr比较
                if(arr[i][j]!=acc[i][j])
                {
                    count++;
                }
            }
        }
        if(count==0)
        {
            printf("Yes");
        }
        else 
        {
            printf("No");
        }
    }
    return 0;
}

发表于 2023-11-20 23:19:34 回复(0)
#include <stdio.h>
int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    int i;
    int arr[n][m];
    for(i=0;i<n;i++)//第一个矩阵的输入
    {
        int j;
        for(j=0;j<m;j++)
        {
            scanf("%d ",arr[i]+j);
        }
    }
    int flag = 1;
    int aee[n][m];
    for(i=0;i<n;i++)//第二个矩阵的输入
    {
        int j;
        for(j=0;j<m;j++)
        {
            scanf("%d ",aee[i]+j);
            if(arr[i][j] != aee[i][j])
            {
                flag = 0;
            }
        }
    }
    if(flag == 1)
    {
        printf("Yes");
    }
    else {
    printf("No");
    }

    return 0;
}

发表于 2023-11-10 10:13:23 回复(0)
#include <stdio.h>

int main()
{
    int n,m;//矩形的格式
    scanf("%d %d",&n,&m);
    int arr1[50][50];
    int arr2[50][50];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%d ",&arr1[i][j]);
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%d ",&arr2[i][j]);
        }
    }//输入两个数组
    int count=0;//创建一个计数器
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(arr1[i][j]==arr2[i][j])
            {
                count++;//每次相等就++
            }
        }
    }
    if(count==n*m)//当count==数组的所有数时,说明两个数组相等
    {
        printf("Yes\n");
    }
    else {
    printf("No\n");
    }
    return 0;
}
发表于 2023-04-12 13:42:32 回复(0)
#include <stdio.h>

int main() {
    int a, b;
    int sum = 0;
    scanf("%d %d", &a, &b);
    int num = a * b;
    int x[num], y[num];
    for (int i = 0; i < num; i++) {
        scanf("%d", &x[i]);
    }
    for (int i = 0; i < num; i++) {
        scanf("%d", &y[i]);
    }
    for (int i = 0; i < num; i++) {
        if (x[i] == y[i]) sum++;
    }
    if (sum == num) printf("Yes\n");
    else printf("No\n");
    return 0;
}

发表于 2023-03-22 12:18:32 回复(0)

问题信息

上传者:牛客309119号
难度:
44条回答 3482浏览

热门推荐

通过挑战的用户

查看代码
矩阵相等判定