一個矩陣元素的“鞍點”是指該位置上的元素值在該行上最大、在該列上最小。
本題要求編寫程序,求一個給定的n階方陣的鞍點。
輸入格式:
輸入第一行給出一個正整數n(1≤n≤6)。隨後n行,每行給出n個整數,其間以空格分隔。
輸出格式:
輸出在一行中按照“行下標 列下標”(下標從0開始)的格式輸出鞍點的位置。如果鞍點不存在,則輸出“NONE”。題目保證給出的矩陣至多存在一個鞍點。
輸入樣例1:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
輸出樣例1:
2 1
輸入樣例2:
2
1 7
4 1
輸出樣例2:
NONE
思路呀:
首先將每行的最大值存入max數組中
然後將每列的最小值存進min數組中
再遍歷全部,判斷每個數字是否與其所在的行列的最大最小值相等,若相等則輸出即可。
代碼如下:(拼音尷尬註釋)
#include <stdio.h>
int main(){
int n;//find the max(line) & min(lie)
scanf("%d",&n);
int a[n][n];
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int max[n],min[n];
//find the hang's max
for(i=0;i<n;i++){
max[i]=a[i][0];
for(j=0;j<n;j++){
if(a[i][j]>max[i])max[i]=a[i][j];
} // printf("max i=%d\n",max[i]);
}
//find the lie's min
for(i=0;i<n;i++){
min[i]=a[0][i];
for(j=0;j<n;j++){
if(a[j][i]<min[i])min[i]=a[j][i];
}// printf("min j=%d\n",min[i]);
}
//find the number
int t=0;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(a[i][j]==max[i]&&a[i][j]==min[j]){
printf("%d %d",i,j) ;
t=1;
}
}
}if(t==0){
printf("NONE");
}
}