摘要:描述輸入一個正整數(shù)和階方陣中的元素,如果找到中的鞍點鞍點的元素值在該行上最大,在該列上最小,就輸出它的下標否則,輸出沒有鞍點,設(shè)中最多有一個鞍點。
? 輸入一個正整數(shù)m(1<= m <= 6)和m階方陣A中的元素,如果找到A中的鞍點(鞍點的元素值在該行上最大,在該列上最?。?,就輸出它的下標;否則,輸出"NO"(沒有鞍點),設(shè)A中最多有一個鞍點。
3
1 2 3
0 1 2
0 0 1
2 2
4
1 2 3 4
0 1 1 3
0 0 1 2
1 0 0 1
NO
? ? ? ? 用二維數(shù)組來做這道題會減小我們的難度。同時,先求出每一行的最大值,再在這一個元素的這一列來判斷它是不是最小的,對它們進行判斷。最后打印出這個元素的下標就可以了。同時還要注意,在樣例中輸入4和矩陣里的元素時發(fā)現(xiàn),有重復(fù)的值(1)的時候,就算他是最小的,但因為重復(fù),不符合鞍點的定義,所以,還需要判斷是否有重復(fù)的值。另外,題目說明,鞍點最多只有一個。
#includeint main(void){ int i = 0, j = 0; int arr[6][6] = { 0 }; int max = 0;//定義最大值 int _bool = 0;//標簽作用,用來判斷是否有重復(fù)值 //最后當(dāng)_bool=0,說明沒有,_bool=1,說明有 int row = 0, col = 0;//行,列 int m = 0; scanf("%d", &m); for(i = 0; i < m; i++) { for(j = 0; j < m; j++) { scanf("%d", &arr[i][j]); } } //由于不知道最大值,開始假設(shè)第一行第一列元素是最大的 max = arr[0][0]; for(i = 0; i < m; i++)//一行 { //假設(shè)每一行的第一個元素為最大值 max = arr[i][j]; //尋找每一行的最大值 for(j = 0; j < m; j++) { if(arr[i][j] > max) { //如果是MAX,就記錄它的下標 //不可以直接用i或j,它們是隨條件在變 //用另一個量來記錄下標 row = j; _bool = 1; //記錄最大值,在后面的判斷用 max = arr[i][j]; } } //用來判斷這一行的最大值是否有重復(fù)的 //如果有,_bool=0,不存在鞍點 for(j = 0; j < m; j++) { //循環(huán)時不需要判斷它本身 if(arr[i][j] == max && j != row) { _bool = 0; } } //列的判斷,行滿足后,找列的最小值。 for(j = 0; j < m; j++) { if(arr[i][row] < arr[j][row]) { col = i; } } } if(_bool == 0) { printf("NO/n"); } else { printf("%d %d", row, col); } return 0;}
????????
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/124774.html