【MAC上でC++】Day 45-5.実験7-2-3行列の局所極大値(15分)を求める
1587 ワード
実験7-2-3行列の局所極大値(15分)を求める
1.タイトルの抜粋
https://pintia.cn/problem-sets/13/problems/514
2.テーマ内容
M行N列の整数行列Aが与えられ、Aの非境界要素A[i][j]が隣接する上下左右4要素より大きい場合、要素A[i][j]は行列の局所極大値であると称される.本題では,与えられた行列のすべての局所極大値とその位置を要求する.
入力形式:
マトリクスAの行数Mと列数N(3≦M,N≦20)を第1行に入力する.最後のM行は、各行にAのN個の要素の値を与える.数字の間はスペースで区切られています.
出力フォーマット:
各行は「要素値行番号列番号」の形式でローカル極大値を出力し、行、列番号は1から開始します.行番号に従って出力を増加することを要求する.同行者がローカル極大値を1つ以上持っている場合、その行はカラム番号で出力を増やします.ローカル極大値がない場合は、「None合計行数合計列数」を出力します.
サンプル1を入力:
4 5 1 1 1 1 1 1 3 9 3 1 1 5 3 5 1 1 1 1 1 1
出力サンプル1:
9 2 3 5 3 2 5 3 4
入力サンプル2:
3 5 1 1 1 1 1 9 3 9 9 1 1 5 3 5 1
出力サンプル2:
None 3 5
3.ソース参照
1.タイトルの抜粋
https://pintia.cn/problem-sets/13/problems/514
2.テーマ内容
M行N列の整数行列Aが与えられ、Aの非境界要素A[i][j]が隣接する上下左右4要素より大きい場合、要素A[i][j]は行列の局所極大値であると称される.本題では,与えられた行列のすべての局所極大値とその位置を要求する.
入力形式:
マトリクスAの行数Mと列数N(3≦M,N≦20)を第1行に入力する.最後のM行は、各行にAのN個の要素の値を与える.数字の間はスペースで区切られています.
出力フォーマット:
各行は「要素値行番号列番号」の形式でローカル極大値を出力し、行、列番号は1から開始します.行番号に従って出力を増加することを要求する.同行者がローカル極大値を1つ以上持っている場合、その行はカラム番号で出力を増やします.ローカル極大値がない場合は、「None合計行数合計列数」を出力します.
サンプル1を入力:
4 5 1 1 1 1 1 1 3 9 3 1 1 5 3 5 1 1 1 1 1 1
出力サンプル1:
9 2 3 5 3 2 5 3 4
入力サンプル2:
3 5 1 1 1 1 1 9 3 9 9 1 1 5 3 5 1
出力サンプル2:
None 3 5
3.ソース参照
#include
using namespace std;
int main()
{
int m, n;
int i, j;
int a[20][20];
int cnt;
cin >> m >> n;
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
cnt = 0;
for(i = 1; i < m - 1; i++)
{
for(j = 1; j < n - 1; 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]))
{
cnt++;
cout << a[i][j] << " " << (i + 1) << " " << (j + 1) << endl;
}
}
}
if(cnt == 0)
{
cout << "None " << m << " " << n << endl;
}
return 0;
}