1. 程式人生 > 其它 >7-1 求矩陣的區域性極大值 (15分) PTA 實驗7.2 二維陣列 第一稿

7-1 求矩陣的區域性極大值 (15分) PTA 實驗7.2 二維陣列 第一稿

技術標籤:刷題記錄——PTA

7-1 求矩陣的區域性極大值 (15分)

題目描述:

給定 M M M N N N列的整數矩陣 A A A,如果 A A A的非邊界元素 A [ i ] [ j ] A[i][j] A[i][j]大於相鄰的上下左右4個元素,那麼就稱元素 A [ i ] [ j ] A[i][j] A[i][j]是矩陣的區域性極大值。本題要求給定矩陣的全部區域性極大值及其所在的位置。

輸入格式:

輸入在第一行中給出矩陣 A A A的行數 M M M和列數 N ( 3 ≤ M , N ≤ 20 ) N(3≤M,N≤20) N3M,N20;最後 M M M行,每行給出 A A

A在該行的 N N 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<stdio.h>
#include<string.h> int main(){ int a[22][22],boo[22][22],m,n; memset(boo,0,sizeof(boo)); scanf("%d%d",&m,&n); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); for(int i=2;i<m;i++) for(int j=
2;j<n;j++) if(a[i][j]>a[i+1][j]&&a[i][j]>a[i][j+1]&&a[i][j]>a[i-1][j]&&a[i][j]>a[i][j-1]) boo[i][j]=1; int co=0; for(int i=2;i<m;i++) for(int j=2;j<n;j++) if(boo[i][j]) printf("%d %d %d\n",a[i][j],i,(co++,j)); //顯然,這一步選擇、計數、列印是可以和上面的判斷合在一起的。 if(!co)printf("None %d %d",m,n); return 0; }