Đếm số lượng giá trị “hoàng hậu” trên ma trận một phần tử được gọi là hoàng hậu khi nó lớn nhất trên dòng, trên cột và 2 đường chéo đi qua nó

7 3.8K 52
Đếm số lượng giá trị “hoàng hậu” trên ma trận  một phần tử được gọi là hoàng hậu khi nó lớn nhất trên dòng, trên cột và 2 đường chéo đi qua nó

Đang tải... (xem toàn văn)

Thông tin tài liệu

Bài 346(*): Đếm số lượng giá trị “Hoàng Hậu” ma trận Một phần tử gọi Hoàng Hậu lớn dòng, cột đường chéo qua #include #include #include #define MAX 100 void NhapMang(int a[][MAX], int &dong, int &cot) { //Nhập số dòng { printf("\nNhap vao so dong: "); // Cách tà đạo: scanf("dong =%d",&dong); // Lúc nhập phải viết thêm scanf("%d",&dong); if(dong < || dong > MAX) { printf("\nSo dong khong hop le Xin kiem tra lai!"); } }while(dong < || dong > MAX); //Nhập số cột chữ ( dong = ) khung console { printf("\nNhap vao so cot: "); scanf("%d",&cot); if(cot < || cot > MAX) { printf("\nSo cot khong hop le Xin kiem tra lai!"); } }while(cot < || cot > MAX); for(int i = 0; i < dong; i++) { for(int j = 0; j < cot; j++) { printf("\nNhap a[%d][%d] = ", i, j); scanf("%d", &a[i][j]); } } } void XuatMang(int a[][MAX], int dong, int cot) { for(int i = 0; i < dong; i++) { for(int j = 0; j < cot; j++) { printf("%4d", a[i][j]); } printf("\n\n"); } } /* - Kiểm tra phần tử có lớn dòng đứng hay không ? - Kiểm tra phần tử có lớn cột đứng hay không ? - Kiểm tra phần tử có lớn đường chéo hay không (Đây hàm phức tạp) Trường hợp cho duyệt theo hướng (4 while): + từ vị trí phần tử tại, i , j (giảm qua trái) + từ vị trí phần tử i ,j++ (giảm phải) + // i++,j++ (tăng phải) + // i++,j (tăng trái) Sau thực hàm trên, duyệt ma trận tìm phần tử "Hoàng Hậu" */ bool KiemTraCoPhaiPhanTuHoangHau(int a[][MAX], int vtdong, int vtcot, int dong, int cot) { int x = a[vtdong][vtcot]; // kiểm tra dòng for(int i = 0; i < cot; i++) { if(a[vtdong][i] > x) { return false; } } // kiểm tra cột for(int j = 0; j < dong; j++) { if(a[j][vtcot] > x) { return false; } } //ktra duong cheo thu nhat int vtdong1 = vtdong + 1; int vtcot1 = vtcot + 1; while (vtcot1 + < cot && vtdong1 < vtdong) { if (a[vtcot1][vtdong1] > x) return false; // tăng phải vtcot1++; vtdong1++; } vtdong1 = vtdong - 1; vtcot1 = vtcot - 1; while (vtcot1 - >= && vtdong1 >= 0) { if (a[vtcot1][vtdong1] > x) return false; //giảm qua trái vtcot1 ; vtdong1 ; } // duong cheo thu vtdong1 = vtdong + 1; vtcot1 = vtcot - 1; while (vtcot1 - >= && vtdong1 < dong) { if (a[vtcot1][vtdong1] > x) return false; // tăng trái vtdong1++; vtcot1 ; } vtdong1 = vtdong - 1; vtcot1 = vtcot + 1; while (vtdong1 - >= && vtcot1 < cot) { if (a[vtcot1][vtdong1] > x) return false; // giảm phải vtdong1 ; vtcot1++; } return true; } int DemSoLuongPhanTuHoangHau(int a[][MAX], int dong, int cot) { int dem = 0; for(int i = 0; i < dong; i++) { for(int j = 0; j < cot; j++) { if(KiemTraCoPhaiPhanTuHoangHau(a, i, j, dong, cot) == true) { dem++; } } } return dem; } int main() { int a[MAX][MAX], dong, cot; NhapMang(a, dong, cot); XuatMang(a, dong, cot); int dem = DemSoLuongPhanTuHoangHau(a, dong, cot); printf("\nSo luong phan tu hoang hau = %d", dem); getch(); return 0; }

Ngày đăng: 20/10/2016, 21:06

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan