鞍点 程序 帮忙看看
#include <stdio.h>
void main()
{
int i,j,max,min,row=0,column=0;
int a[5][5]={9,8,7,6,5,
1,2,1,1,1,
1,3,1,1,1,
2,5,6,7,8,
4,7,8,9,10
};
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
max=a[i][0];
if(max<a[i][j]){
max=a[i][j]; // 找出行的最大值
column=j; //记下列
}
}
}
min=a[0][column]; //在j列找最小值
for(i=0;i<5;i++){
if(min>a[i][column])
min=a[i][column];
row=i;
}
if(max==min) //两个条件都满足
printf("该矩阵鞍点为%d行%d列",row+1,column+1);
else
printf("该矩阵无鞍点.");
}
程序很简单 但是就是搞不对 搞了半天实在不知道错在哪里了 哎 只怪自己 水平太烂 求高手帮忙看看
[解决办法]
这里的鞍点是不是行最大值同时也是列的最小值。
一个矩阵中可能有多个这样的值。
你应该在一行中找到最大值之后,应该立刻判断它是否是它所在列的最小值。
如果是,那么就输出。
如果所有行都不满足,则无鞍点。
- C/C++ code
#include <stdio.h>void main(){ int max,min,row=0,column=0; int flag=0; int a[5][5]={ 9,8,7,6,5, 1,2,1,1,1, 1,3,1,1,1, 2,5,6,7,8, 4,7,8,9,10 }; for(int i=0;i<5;i++) { max=a[i][0]; for(int j=0;j<5;j++) { if(max<a[i][j]){ max=a[i][j]; // 找出行的最大值 column=j; //记下列 } } min=a[0][column]; //在j列找最小值 for(int j=0;j<5;j++){ if(min>a[j][column]) { min=a[j][column]; row=j; } } if(max==min) //两个条件都满足 { flag = 1; printf("该矩阵鞍点为%d行%d列\n",row+1,column+1); } } if( flag==0 ) printf("该矩阵无鞍点.");}
[解决办法]
1 #include <stdio.h>
2
3 int
4 main ()
5 {
6 int i, j, k, max, min, row = 0, column = 0;
7
8 int a[5][5] =
9 {
10 {9, 8, 7, 6, 5},
11 {1, 2, 1, 1, 1},
12 {1, 3, 1, 1, 1},
13 {2, 5, 6, 7, 8},
14 {4, 7, 8, 9, 10}
15 };
16 for (i = 0; i < 5; i++)
17 {
18 //printf("No.%d row!\n", i+1);
19 max = a[i][0];
20 for (j = 0; j < 5; j++)
21 {
22 if (max < a[i][j])
23 {
24 max = a[i][j]; // 找出行的最大值
25 column = j; //记下列
26 }
27 }
28 // printf("NO.%d row max value = %d\n", i+1, max);
29 //printf("col = %d\n", column);
30 min = a[0][column]; //在j列找最小值
31 for (k = 0; k < 5; k++)
32 {
33 if (min > a[k][column])
34 {
35 min = a[k][column];
36 row = k;
37 }
38 }
39 //printf("NO.%d col min value = %d\n", i+1, min);
40 if (max == min) //两个条件都满足
41 {
42 printf ("该矩阵鞍点为%d行%d列\n", row + 1, column + 1);
43 }
44 else
{
45 printf ("该矩阵无鞍点.\n");
}
46 }
47
48 return 0;
49 }
修改了一下你的程序,找到一个鞍点,是第二行第二列;参考一下吧,该加括号的要加上括号。