字符矩阵(counts)问题描述:输入一个 m 行 n 列的字符矩阵,全部由 ABCDE 组成,统计其中四个角由相同字符组成的矩形的个数。这里的矩形要求至少 2 行、2 列。输入格式:第一行为正整数 t(≤5),表示测试数据组数;每组数据中,第一行为正整数 m 和 n(0<m,n≤300),表示字符矩阵的大小,接下来为一个 m 行 n 列的字符矩阵。数据中保证只出现字母 ABCDE。输出格式:对于每组数据,输出一个正整数表示符合条件的矩形的个数。
#include <iostream>
using namespace std;
int main()
{
int t;
int m, n;
for (int i = 0; i < t; i++)
{
cin >> m >> n;
char a[m][n];
{
for (int j = 0; j < m; j++)
{
for (int k = 0; k < n; k++)
{
cin >> a[j][k];
}
}
}
int cnt = 0;
int min = m > n ? n : m;
for (int j = 0; j < m - min; j++)
{
for (int k = 0; k < n - min; k++)
{
for (int l = 1; l <= min; l++)
{
if (a[j][k] == a[j + l][k] && a[j][k] == a[j][k + l] && a[j][k] == a[j + i][k + i])
cnt++;
}
}
}
cout << cnt << endl;
}
return 0;
}
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
//统计m*n行矩阵中,row*col矩阵符合条件的矩形个数
int calsmall(char a[][301], int m, int n, int row, int col)
{
int cnt = 0;
for (int i = 0; i < m - row; i++)
{
for (int j = 0; j < n - col; j++)
{
if (a[i][j] == a[i + row-1][j] && a[i][j] == a[i][j + col-1] && a[i][j] == a[i + row-1][j + col-1])
cnt++;
}
}
return cnt;
}
//统计m*n行矩阵中符合条件的矩形个数
int cal(char a[][301], int m, int n)
{
int cnt = 0;
for (int row = 2; row <= m; row++) //row行
{
for (int col = 2; col <= n; col++) //col列
{
cnt += calsmall(a, m, n, row, col);
}
}
return cnt;
}
int main()
{
int t, m, n;
char a[301][301] = { 0 };
cin >> t;
for (int i = 0; i < t; i++) //t组数据
{
cin >> m >> n; //输入行和列数
for (int j = 0; j < m; j++)
cin >> a[j]; //输入字符矩阵
cout << cal(a, m, n) << endl;
}
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
int countRectangles(vector<vector<char>>& matrix, int m, int n) {
int count = 0;
for (int i = 0; i < m - 1; i++) {
for (int j = 0; j < n - 1; j++) {
if (matrix[i][j] == matrix[i][j+1] && matrix[i][j] == matrix[i+1][j] && matrix[i][j] == matrix[i+1][j+1]) {
count++;
}
}
}
return count;
}
int main() {
int t;
cin >> t;
while (t--) {
int m, n;
cin >> m >> n;
vector<vector<char>> matrix(m, vector<char>(n));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
}
}
int result = countRectangles(matrix, m, n);
cout << result << endl;
}
return 0;
}
【以下回答由 GPT 生成】
我需要了解如何判断一个矩形是否由相同字符组成。需要知道矩形的起始位置和结束位置,以及如何遍历矩阵。
【相关推荐】