08-2. 行列の局部の極大値を求めます(15)
M行N列の整数行列Aが与えられ、Aの非境界要素A[i][j]が隣接する上下左右4要素より大きい場合、要素A[i][j]は行列の局所極大値であると称される.本題では,与えられた行列のすべての局所極大値とその位置を要求する.
入力形式:
1行目に与えられる行列Aの行数Mと列数N(3<=M、N<=20)を入力する.最後のM行は、各行にAのN個の要素の値を与える.数字の間はスペースで区切られています.
出力フォーマット:
各行は「要素値行番号列番号」の形式でローカル極大値を出力し、行、列番号は1から開始します.行番号に従って出力を増加することを要求する.同行者がローカル極大値を1つ以上持っている場合、その行はカラム番号で出力を増やします.ローカル極大値がない場合は、「None合計行数合計列数」を出力します.
サンプル1を入力:
出力サンプル1:
入力サンプル2:
出力サンプル2:
入力形式:
1行目に与えられる行列Aの行数Mと列数N(3<=M、N<=20)を入力する.最後の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
#include
int main()
{
int i=0,j=0;
int k=0;
scanf("%d %d",&i,&j);
int a[i][j];
int r=0,s=0;
for(r=1;r<=i;r++) //input
{
for(s=1;s<=j;s++)
{
if(s==j)
{
scanf("%d",&a[r-1][s-1]);
}
else
{
scanf("%d ",&a[r-1][s-1]);
}
}
}
for(r=1;r<=i-2;r++) //output
{
for(s=1;s<=j-2;s++)
{
if(a[r][s]>a[r-1][s]&&a[r][s]>a[r][s-1]&&a[r][s]>a[r+1][s]&&a[r][s]>a[r][s+1])
{
printf("%d %d %d
",a[r][s],r+1,s+1);
k=1;
}
}
}
if(k==0)
{
printf("None %d %d",i,j);
}
return 0;
}