Đếm số lượng phần tử cực đại trong ma trận các số thực. Một phần tử được gọi là cực đại khi nó lớn hơn các phần tử xung quanh

Đề bài:

Đếm số lượng phần tử cực đại trong ma trận các số thực. Một phần tử được gọi là cực đại khi nó lớn hơn các phần tử xung quanh

Em đang thắc mắc không biết làm sao để kiểm tra mấy cái số Ở BIÊN CÓ CỰC ĐẠI HAY KHÔNG, em nghĩ nếu xét từng ô thì nó hơi lâu ạ :D. Mọi người chỉnh code giúp em ạ. Em cảm ơn nhiều.

Cái này là kiểm tra mấy cái số không phải ở biên có phải cực đại không nên mng không cần quan tâm cho rắc rối ạ :sunny:

if (a[i][j]>a[i][j+1]&&a[i][j]>a[i][j-1]&&a[i][j]>a[i-1][j]&&a[i][j]>a[i-1][j-1]&&a[i][j]>a[i-1][j+1]&&a[i][j]>a[i+1][j]&&a[i][j]>a[i+1][j+1]&&a[i][j]>a[i][j-1]) 

Hình minh họa.
image

#include <iostream>
using namespace std;
int main () { 
     int row,col; 
    int a[101][101];
    cout << "\n nhap so hang: "; 
    cin >> row; 
    cout << "\n nhap so cot: "; 
    cin >> col; 
    for (int i = 0; i<row;i++) { 
       for (int j=0;j<col;j++) { 
           cout << "\n a["<<i<<"]["<<j<<"]= "; 
           cin >> a[i][j]; 
	   }
	}
	for ( int i = 0; i<row;i++) { 
	   for ( int j = 0; j<col; j++) { 
	       cout <<  a[i][j] << " "; 
	   }
    cout << endl; 
	}
	cout << endl << endl << endl; 
    	for ( int i = 0; i<row;i++) { 
	   for ( int j = 0; j<col; j++) { 
	        if (a[i][j]>a[i][j+1]&&a[i][j]>a[i][j-1]&&a[i][j]>a[i-1][j]&&a[i][j]>a[i-1][j-1]&&a[i][j]>a[i-1][j+1]&&a[i][j]>a[i+1][j]&&a[i][j]>a[i+1][j+1]&&a[i][j]>a[i][j-1]) 
	        cout << a[i][j] << " "; 
		   }
	}
	return 0; 
}

Tức là kiểm cả đường chéo luôn? 9 ô.
Khi xác định được 1 phần tử cực đại rồi thì 8 ô (xung quanh) còn lại chắc chắn không có ô nào chứa phần tử cực đại được nữa.
Các giá trị tại viền thì bạn chỉ so sánh số phần tử ít hơn (4 hoặc 6).
Bạn so sánh tất cả trong 1 if thì sẽ xảy ra việc truy xuất phần tử ngoài ma trận (rác).
Tách thành 8 cái if thì sao?

5 Likes

Sr em chỉ hiểu mỗi cái 8 ô xung quanh không còn ô nào chứa phần tử cực đại nữa và thấy cách của anh hay vl :sunny: nhưng ''kiểm tra đường chéo 9 ô … ‘’ thì em không hiểu lắm ạ

Để viền mảng thì bạn phải +2 (cả viền trái và phải) và những ô viền ko thay đổi max 9 ô.

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?