Kiểm tra mảng 2 chiều đối xứng trong lập trình C/C++

Đây là một dạng bài tập đơn giản và tương đối cơ bản giúp cho việc luyện tập code lập trình C/C++ mang lại hiệu quả rất tốt.
Kiểm tra mảng 2 chiều đối xứng trong lập trình C/C++
Thế nào là mảng 2 chiều đối xứng thì với tất cả các phần tử trong mảng 2 chiều mà đối xứng nhau thì sẽ luôn bằng nhau. Hay nói cách khác là mọi A[i][j] = A[j][i].
Vậy làm sao để kiểm tra được mảng 2 chiều đối xứng, ý tưởng sẽ rất đơn giản thôi. Ta duyệt 2 vòng lặp i, j để duyệt hết được tất cả các phần tử trong mảng 2 chiều, nếu trong trường hợp ta gặp 1 cặp A[i][[j] mà khác với A[j][[i] thì kết luận luân là mảng không đối xứng. Ngược lại nếu ta duyệt hết tất cả các phần tử mà không gặp cặp A[i][[j] và A[j][[i] nào khác nhau thì lúc đó mảng là đối xứng nhau.
Ta có thể viết chương trình C như sau:
#include<stdio.h> #include<math.h> #define maxm 100 void nhap(int a[][maxm], int n, int m) { int i, j; for(i=0;i < n;i++) for(j=0;j< m;j++) { printf("A[%d][%d] = ",i,j); scanf("%d",&a[i][j]); } } void xuat(int a[][maxm],int n, int m) { int i, j; for(i=0;i<n;i++) { for(j = 0;j<m; j++){ printf("%d ",a[i][j]); } printf("\n"); } } int doixung(int a[][maxm],int n, int m) { int i, j; for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(a[i][j] != a[j][i]) return 0; } } return 1; } int main() { int n, m; printf("Nhap so hang: "); scanf("%d", &n); printf("Nhap so cot: "); scanf("%d", &m); int a[n][m]; nhap(a, n, m); xuat(a,n, m); if(doixung(a, n, m)==1) { printf(" =>Mang doi xung"); } else { printf(" =>Mang khong doi xung"); } }
Chuyển thành chương trình C++
#include <iostream> #include<cmath> #define maxm 100 #define maxn 100 using namespace std; void nhap(int a[][maxm], int n, int m) { for(int i=0;i < n;i++) for(int j=0;j< m;j++) { cout<<"A["<<i<<"]["<<j<<"]] = "; cin>>a[i][j]; } } void xuat(int a[][maxm],int n, int m) { int i, j; for(i=0;i<n;i++) { for(j = 0;j<m; j++){ cout<<a[i][j]<<" "; } cout<<"\n"; } } int doixung(int a[][maxm],int n, int m) { int i, j; for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(a[i][j] != a[j][i]) return 0; } } return 1; } int main() { int a[maxn][maxm]; int n, m; cout<<"Nhap so hang: "; cin>>n; cout<<"Nhap so cot: "; cin>>m; nhap(a, n, m); xuat(a,n, m); if(doixung(a, n, m)==1) { cout<<" =>Mang doi xung"; } else { cout<<" =>Mang khong doi xung"; } }
Bạn chạy chương trình xem kết quả nhé
[Xem tất cả bài viết chủ đề C/C++ tại đây]