7-5 找鞍點 (10 分)c語言解答
阿新 • • 發佈:2018-12-03
7-5 找鞍點 (10 分)
一個矩陣元素的“鞍點”是指該位置上的元素值在該行上最大、在該列上最小。
本題要求編寫程式,求一個給定的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
解答思路:這題一開始我是直接在主函式中進行判斷的好多for迴圈弄得我亂的一p,最後測試資料才對了一個真的難受
後來想到函式通過一個函式判斷這個點然後就簡單很多了
我的程式碼
#include <stdio.h> #define maxn 6 int judge(int a[][maxn],int n,int r,int c){//次函式用於判斷該點是否為矩陣中的鞍點 int i;//假設傳進來的點為鞍點 for(i=0;i<n;i++){ //先判斷是不是行上的最大值 if(a[r][i]>a[r][c]){ //那說明傳入進來的值不是該行上的最大值 return 0; } } for(i=0;i<n;i++){ //用於判斷該傳入數是否為該列上的最小值 if(a[r][c]>a[i][c]){ return 0; } } return 1; //如果上述過程中沒有跳出則說明它就是鞍點,所以返回判斷值1 } int main() { int a[6][6]; int n; int i; int j; scanf("%d",&n);//輸入n for(i=0;i<n;i++){ for(j=0;j<n;j++) scanf("%d",&a[i][j]);//輸入資料 } int flat=0; //下面是遍歷每個數字,經過鞍點條件判斷是否為素數 for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(judge(a ,n ,i ,j ) = =1){ printf("%d %d", i , j ); flat=1;//這裡是用於判斷是否有鞍點輸出了,有的話判斷值flat=1最後就不會輸出NONE。 } } } if(flat==0) printf("NONE"); return 0; }
ps.要是有更好的方法,麻煩評論一下哦,如果有錯誤歡迎指出
pps.我自己是真的弱,真的很希望幫助哈
ppps.希望轉載的話附上我名字就好了,and程式碼要多自己理解而不是複製貼上,就算抄一遍也不要複製貼上
月光不染是非