qazwsxedc1267834 2021-11-13 17:28 采纳率: 100%
浏览 43
已结题

找鞍点,如果一行没最大数有两个以上,就不成立,如何编写程序

输入a[3][4],找出鞍点。在它所在行最大(没有跟它相等的数),在它所在列最小(没有跟它相等的数)。

注意:也可能没有鞍点。若没有鞍点,输出:“not exist”
如何保证同行内最大数字如果重的话就没有鞍点。

代码如下,有漏洞,不知道哪里错了,如何修改。

#include<stdio.h>
int main()
{
int a[3][4],i,j,max,min,k,sum,m,sum1=0,p;
for(i=0; i<=2; i++)
{
for(j=0; j<=3; j++)
scanf("%d",&a[i][j]);
}
for(i=0; i<3; i++)
{
max=a[i][0];
k=0;
for(j=0; j<=3; j++)
{
if(a[i][j]>max)
{
max=a[i][j];
k=j;
}
}
sum=1;
for(m=0; m<3; m++)
{
if(a[m][k]<max)
sum=0;
}
sum1 =0; //这里把sum1重置为0,因为for循环是从0-3遍历所有的列
for(j=0;j<=3;j++)
if(a[i][j]==max)
sum1++;//排除同行最大数相同情况
if(sum==1&&sum1<2)//sum=1 两个等号
{
printf("a[%d][%d]=%d\n",i,k,max); //这里加一个回车,避免有多个鞍点时,输出连在一起
//break; //这里的break去掉,否则外层循环就结束了,一个二维数组中可能存在多个鞍点
}else //这里直接用else即可
//if(sum=0||sum1>=2)
printf("not exist"); //第i行没有鞍点
return 0;
}
}

在原有基础上修改,修补漏洞。

img


这组数据应该输出 不正确
在原有基础上修改,修补漏洞。

  • 写回答

1条回答 默认 最新

  • 关注

    抱歉,刚出门回来。在这里给你回复一下。
    if(a[m][k]<max)这一行,修改为为 if(a[m][k]<=max) ,这里包含=,因为题目要求不能有相等的。
    最后的return 0;放在for循环的外面。
    代码如下:

    #include<stdio.h>
    int main()
    {
        int a[3][4],i,j,max,min,k,sum,m,sum1=0,p;
        for(i=0; i<=2; i++)
        {
            for(j=0; j<=3; j++)
                scanf("%d",&a[i][j]);
        }
        for(i=0; i<3; i++)
        {
            max=a[i][0];
            k=0;
            for(j=0; j<=3; j++)
            {
                if(a[i][j]>max)
                {
                    max=a[i][j];
                    k=j;
                }
            }
            sum=1;
            for(m=0; m<3; m++)
            {
                if(a[m][k]<=max && m!= i) //这里包含=(因为题目要求不能有相等的)
                    sum=0;
            }
            sum1 =0; //这里把sum1重置为0,因为for循环是从0-3遍历所有的列
            for(j=0;j<=3;j++)
                if(a[i][j]==max)
                    sum1++;//排除同行最大数相同情况
            if(sum==1&&sum1<2)//sum=1 两个等号
            {
                printf("a[%d][%d]=%d\n",i,k,max); //这里加一个回车,避免有多个鞍点时,输出连在一起
                //break; //这里的break去掉,否则外层循环就结束了,一个二维数组中可能存在多个鞍点
            }else //这里直接用else即可
                //if(sum=0||sum1>=2)
                printf("not exist"); //第i行没有鞍点
            //return 0; //return 0放在for循环外面
        }
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月22日
  • 已采纳回答 11月14日
  • 创建了问题 11月13日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效