求问,人傻了QAQ,为什么下面的程序运行结果会是不属于数组里的数字2
#include <stdio.h>
int main()
{
int a[][2]={1,3,7,8};
int i,k,max[2],h,t;
for(k=0;k<2;k++)
{
for(max[k]=a[k][0],i=1;i<2;i++)
{
if(max[k]<a[k][i])
{
max[k]=a[k][i];
}
}
for(t=0;t<2;t++)
{
if(max[k]<=a[k][t])
h++;
}
if(h==2)
{
printf("%d",a[t][k]);
}
}
return 0;
}
#include <stdio.h>
int main()
{
int a[][2] = { {1,3}, {7,8} };
int i, j, max, min, row, col, is_saddle;
for (i = 0; i < 2; i++)
{
max = a[i][0]; // 假设每行的最大值为该行的第一个元素
col = 0;
// 寻找第 i 行的最大值和列坐标
for (j = 1; j < 2; j++)
{
if (max < a[i][j])
{
max = a[i][j];
col = j;
}
}
// 判断是否为鞍点
is_saddle = 1;
min = a[0][col]; // 假设每列的最小值为该列的第一个元素
row = 0;
for (j = 1; j < 2; j++)
{
if (min > a[j][col])
{
min = a[j][col];
row = j;
}
}
if (max == min && row == i)
{
printf("鞍点为:%d", a[i][col]);
return 0;
}
}
printf("不存在鞍点");
return 0;
}
int QueueLength_LQ(LQueue Q)
{
LQNode* p;
p = Q.front;
int sum = 0;
while (p != NULL)
{
sum++;
p = p->next;
}
return sum;
}
示例代码:
#include<stdio.h>
int main()
{
int a[4][5];
int i,j,k,m=0,n=0,max=0,min=0,temp=0;
printf("输入数组的值:\n");
for(i=0;i<4;i++)//键盘输入二维数组的值
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)//获得i行最大值
if(a[i][m]<a[i][j])
{
m=j;
a[i][m]=a[i][j];
}
max=a[i][m];//存储该行最大值所在的列为m
min=a[0][m];//存储m列的最小值
for(k=0;k<4;k++)
if(a[k][m]<min)//获得该列最小值
{
min=a[k][m];
n=k;
}
if(max==min){//若相等则有鞍点,循环结束
temp=1;
printf("鞍点为:a[%d][%d]=%d",n,m,a[n][m]);
break;
}
}
if(temp==0)
printf("该二维数组不存在鞍点!");
}
问题解答:
对于二维数组的鞍点查找,可以按照参考资料中的解题流程,对每行进行遍历,先找到每行的最大值,然后再确定该最大值是否是所在列的最小值,若满足,则为鞍点,遍历停止;否则,继续,若遍历完所有行之后依旧未找到,则表示该二维矩阵无鞍点。
程序中可能存在的问题包括:
完整程序已经修正了上述的问题,可以直接运行使用。