1. 程式人生 > >7-5 找鞍點 (10 分)c語言解答

7-5 找鞍點 (10 分)c語言解答

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程式碼要多自己理解而不是複製貼上,就算抄一遍也不要複製貼上
月光不染是非