Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Chương trình C# kiểm tra hai ma trận đồng nhất (Identical Matrices)

Hai ma trận đồng nhất (identical) khi: cùng kích thước (số hàng, số cột) VÀ tất cả phần tử tương ứng bằng nhau.

Thuật toán

  1. Kiểm tra kích thước: rows1 == rows2 && cols1 == cols2.
  2. Duyệt từng phần tử (i, j), so sánh arr1[i,j] == arr2[i,j].
  3. Nếu có bất kỳ cặp nào khác → không đồng nhất, dừng sớm (early exit).

Mã nguồn


using System;

namespace Demo {
    public class ApplicationOne {
        public static void Main() {
            Console.Write("Hàng ma trận 1: "); int row1 = int.Parse(Console.ReadLine());
            Console.Write("Cột ma trận 1: "); int col1 = int.Parse(Console.ReadLine());
            Console.Write("Hàng ma trận 2: "); int row2 = int.Parse(Console.ReadLine());
            Console.Write("Cột ma trận 2: "); int col2 = int.Parse(Console.ReadLine());
            
            if (row1 != row2 || col1 != col2) {
                Console.WriteLine("Hai ma trận KHÔNG thể so sánh (kích thước khác nhau).");
                return;
            }
            
            int[,] arr1 = new int[row1, col1];
            int[,] arr2 = new int[row2, col2];
            
            Console.WriteLine("Nhập ma trận 1:");
            for (int i = 0; i < row1; i++)
                for (int j = 0; j < col1; j++) {
                    Console.Write($"Phần tử [{i},{j}]: ");
                    arr1[i, j] = int.Parse(Console.ReadLine());
                }
            
            Console.WriteLine("Nhập ma trận 2:");
            for (int i = 0; i < row2; i++)
                for (int j = 0; j < col2; j++) {
                    Console.Write($"Phần tử [{i},{j}]: ");
                    arr2[i, j] = int.Parse(Console.ReadLine());
                }
            
            bool identical = true;
            for (int i = 0; i < row1 && identical; i++) {
                for (int j = 0; j < col1; j++) {
                    if (arr1[i, j] != arr2[i, j]) {
                        identical = false;
                        break;
                    }
                }
            }
            
            Console.WriteLine(identical ? "Hai ma trận ĐỒNG NHẤT!" : "Hai ma trận KHÁC NHAU!");
        }
    }
}

Kết quả mẫu


Hàng ma trận 1: 2
Cột ma trận 1: 2
Hàng ma trận 2: 2
Cột ma trận 2: 2
Nhập ma trận 1:
Phần tử [0,0]: 1
Phần tử [0,1]: 2
Phần tử [1,0]: 3
Phần tử [1,1]: 4
Nhập ma trận 2:
Phần tử [0,0]: 1
Phần tử [0,1]: 2
Phần tử [1,0]: 3
Phần tử [1,1]: 4
Hai ma trận ĐỒNG NHẤT!

Cách LINQ (ngắn gọn, cho mảng 1D hoặc flatten)


// Với mảng 2D, cần flatten trước
bool identical = arr1.Cast().SequenceEqual(arr2.Cast());
// Hoặc
bool identical = Enumerable.SequenceEqual(
    arr1.Cast(), arr2.Cast());

Lưu ý

  • Code gốc có lỗi logic: if (row1 != row2 && col1 != col2) — sai, phải dùng || (OR). Đã sửa.
  • Code gốc hardcode mảng size 10x10 — đã đổi thành dynamic theo input.
  • Dùng break thoát sớm khi tìm thấy khác biệt (tối ưu).
  • Với ma trận lớn, cân nhắc Memory<T>, Span<T>, hoặc unsafe pointer so sánh block memory.