計算鞍點

描述
給定一個5*5的矩陣,每行只有一個最大值,每列只有一個最小值,尋找這個矩陣的鞍點。鞍點指的是矩陣中的一個元素,它是所在行的最大值,並且是所在列的最小值。 例如:在下面的例子中(第4行第1列的元素就是鞍點,值爲8 )。
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
格式
輸入格式
輸入包含一個5行5列的矩陣。
輸出格式
如果存在鞍點,輸出鞍點所在的行、列及其值,如果不存在,輸出"not found"。
樣例
輸入樣例
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
輸出樣例
4 1 8
限制
時間限制: 1000 ms

內存限制: 65536 KB

#include <stdio.h>
#define num 5
int main()
{
	int arr[num][num];
	int index[5];  //  記錄每行最大的索引  索引代表行號   數值代表列號 
	int i,j,max,min,state,l;

	for(i = 0;i<num;i++)
		for(j = 0;j<num;j++)
			scanf("%d",arr[i]+j);
	
	for(i = 0;i<num;i++){   // 定行掃列  找行最大 
		max = arr[i][0];
		index[i] = 0;
		for(j = 1;j<num;j++){
			if(arr[i][j]>max){
				max = arr[i][j];
				index[i] = j;
			}
		}
	}
	
	state = 0; //默認是沒有鞍點的
	
	for(i = 0;i<num;i++){ // 定列掃行  找列最小 
		int p = 1;
		l = index[i];
		min = arr[i][l];
		for(j = 0;j<num;j++){
			if(arr[j][l]<min){
				p = 0;
				break;
			}
		}
		if(p){
			printf("%d %d %d",i+1,l+1,arr[i][l]);
			state = 1;
		}
	}
	if(!state)printf("not found");
	
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章