Giả sử chúng ta có một ma trận M. Điều này được lấp đầy bởi các ngôi sao và chữ cái. Chúng ta phải tìm chữ cái nào có số lượng sao tối đa xung quanh nó. Vì vậy, nếu ma trận như dưới đây -
Ở đây A và C có 7 ngôi sao xung quanh nó. đây là mức tối đa. Vì A nhỏ hơn về mặt từ vựng nên nó sẽ là đầu ra.
Cách tiếp cận rất đơn giản, chúng tôi sẽ đếm các ký tự, sau đó khi một ký tự đã tìm thấy, sau đó đếm các ngôi sao xung quanh nó. Đồng thời lưu trữ giá trị bên trong bản đồ. Từ bản đồ có kích thước tối đa sẽ được in.
Ví dụ
#include <iostream> #include<unordered_map> #define MAX 4 using namespace std; int checkStarCount(int mat[][MAX], int i, int j, int n) { int count = 0; int move_row[] = { -1, -1, -1, 0, 0, 1, 1, 1 }; int move_col[] = { -1, 0, 1, -1, 1, -1, 0, 1 }; for (int k = 0; k < 8; k++) { int x = i + move_row[k]; int y = j + move_col[k]; if (x >= 0 && x < n && y >= 0 && y < n && mat[x][y] == '*') count++; } return count; } char charWithMaxStar(int mat[][4], int n) { unordered_map<char, int> star_count_map; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if ((mat[i][j] - 'A') >= 0 && (mat[i][j] - 'A') < 26) { int stars = checkStarCount(mat, i, j, n); star_count_map[mat[i][j]] = stars; } } } int max = -1; char result = 'Z' + 1; for (auto x : star_count_map) { if (x.second > max || (x.second == max && x.first < result)) { max = x.second; result = x.first; } } return result; } int main() { int mat[][4] = { { 'B', '*', '*', '*' }, { '*', '*', 'C', '*' }, { '*', 'A', '*', '*' }, { '*', '*', '*', 'D' } }; int n = 4; cout << charWithMaxStar(mat, n) << " has maximum amount of stars around it"; }
Đầu ra
A has maximum amount of stars around it