不知道哪出问题啦
#include "stdafx.h"
#include "stdio.h"
#define N 4
void main()
{
int a,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);
}
}
flag=0;
for(i=0;i<N;i++)
{
max=a;maxj=0;
for(j=0;j<N-1;j++)
{
if(a<a)
{
max=a;
maxj=j+1;
}
}
for(k=0;k<N;k++)
{
if(max>a) 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是鞍点
(没办法发图)能帮我看看嘛
#include<stdio.h>
#define N 4
int main()
{
int a,i,j,maxx,miny,maxj,mini,k,flag;
printf("输入数据4*4:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&a);
}
}
flag=0;
for(i=0;i<N;i++)
{
maxx=a,maxj=0;
for(j=0;j<N-1;j++)
{
if(a<a)
{
maxx=a; //第i行最大的数
maxj=j+1; //第i行最大的数所在的列
}
}
miny=a;mini=0;
for(k=0;k<N-1;k++)
{
if(miny>a)
{
miny=a; //第maxj列最小的数
mini=k+1; //第maxj列最小的数所在的行
}
}
if(maxx==miny)
{
printf("第%d行第%d列的%d是鞍点\n",mini+1,maxj+1,maxx);
flag=1;
}
}
if(!flag) printf("矩阵无鞍点\n");
}
我大概改了一下,如有错误,欢迎纠正 Aojacy 发表于 2019-2-9 19:06
#include
#define N 4
int main()
你的没问题,可我的不知道错在哪里 wuta 发表于 2019-2-9 21:48
你的没问题,可我的不知道错在哪里
可以跟我的对比一下,看看有没有缺什么,或者找找有没有逻辑错误,自己的错误还是自己纠正好一点{:5_95:} for(k=0;k<N;k++)
{
if(max>a) break; //这里的条件判断,当max和这一列四个数比较的时候 遇到比自己大的不跳出 就会继续往下输出一遍 而且就算这一列真的没有比自己大的 肯定也会和自己比 max显然不大于max 还是会输出 这里逻辑有漏洞
printf("第%d行第%d列的%d是鞍点\n",i+1,maxj+1,max);
flag=1;
}
这一段逻辑有错误,无法实现max先与所在列的四个数进行比较 判断其是否为最小在输出 建议换个思路 先选出这一列最小数 再用最小数与max比较作为判断是否输出的调件
页:
[1]