马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include "stdafx.h"
#include "stdio.h"
#define N 4
void main()
{
int a[N][N],i,j,max,maxj,k,flag;
printf("输入数据4*4:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
}
}
flag=0;
for(i=0;i<N;i++)
{
max=a[i][0];maxj=0;
for(j=0;j<N-1;j++)
{
if(a[i][j]<a[i][j+1])
{
max=a[i][j+1];
maxj=j+1;
}
}
for(k=0;k<N;k++)
{
if(max>a[k][maxj]) break;
printf("第%d行第%d列的%d是鞍点\n",i+1,maxj+1,max);
flag=1;
}
}
if(!flag) printf("矩阵无鞍点\n");
}
二维数组找鞍点(每行最大的,且每列最小的是鞍点)
9 80 205 40
90 -60 96 1
210 -3 101 89
45 58 56 7
结果应该是:矩阵无鞍点。
可是几个如下:
第1行第3列的205是鞍点
第2行第3列的96是鞍点
第2行第3列的96是鞍点
第2行第3列的96是鞍点
第3行第3列的101是鞍点
第4行第2列的59是鞍点
(没办法发图)能帮我看看嘛
for(k=0;k<N;k++)
{
if(max>a[k][maxj]) break; //这里的条件判断,当max和这一列四个数比较的时候 遇到比自己大的不跳出 就会继续往下输出一遍 而且就算这一列真的没有比自己大的 肯定也会和自己比 max显然不大于max 还是会输出 这里逻辑有漏洞
printf("第%d行第%d列的%d是鞍点\n",i+1,maxj+1,max);
flag=1;
}
这一段逻辑有错误,无法实现max先与所在列的四个数进行比较 判断其是否为最小在输出 建议换个思路 先选出这一列最小数 再用最小数与max比较作为判断是否输出的调件
|