小白的首席大弟子 2021-11-22 22:27 采纳率: 84.6%
浏览 42
已结题

请问各位,此题需求矩阵的鞍点,我的代码错在哪,该怎么改呢


#include<stdio.h>
#include<stdlib.h>
int main()
{
    int m,p,k,max,lie[3]={0},i,j,a[3][3]={{1,5,3},{7,10,4},{4,9,5}};
    for(i=0;i<3;i++)
    {
        for(j=0,p=0;j<3;j++)
        {
            max=a[i][0],lie[p]=0;
            if (a[i][j]>max)
            {
                max=a[i][j];
                lie[p]=j;
                
            }

        }
        p++;
        
    }
    m=0;
    while(1)
    {
    
    
     for(k=0;k<3;k++)
    {
        if(a[k][lie[m]]>max)
        {
            printf("a[%d][%d]为鞍点,值为%d\n",k,lie,a[k][lie[m]]);
        }
    }
    m++;
    if(m==3)
    {
        break;
    }
}
    
    return 0;
}
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-11-23 00:13
    关注

    题主的代码修改如下,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        int m,p,k,max,lie[3]={0},i,j,a[3][3]={{1,5,3},{7,10,4},{4,9,5}};
        for(i=0;i<3;i++)
        {
            max=a[i][0];lie[i]=0;
            for(j=0;j<3;j++)      //for(j=0,p=0;j<3;j++)
            {
                //max=a[i][0],lie[p]=0;
                if (a[i][j]>max)
                {
                    max=a[i][j];
                    lie[i]=j;
                }
            }   //p++;
        }
        m=0;i=0;   //修改
        while(1)
        {
            max=a[i][lie[m]]; //修改
            for(k=0;k<3;k++)
            {
                if(a[k][lie[m]]<max)
                {
                   max=a[k][lie[m]]; //修改
                }
            }
            if(max == a[i][lie[m]])  //修改
                 printf("a[%d][%d]为鞍点,值为%d\n",i,lie[m],a[i][lie[m]]);
            m++;i++;                 //修改
            if(m==3)
            {
                break;
            }
        }
        return 0;
    }
    
    

    另一种写法,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        int m,p,k,max,min,i,j,a[3][3]={{1, 5,3},
                                       {7,10,4},
                                       {4, 9,5}};// lie[3]={0},
        int row=0,col=0;
        for(i=0;i<3;i++)
        {
            max=a[i][0];
            for(j=0;j<3;j++)
            {
                if (a[i][j]>max)
                {
                    max=a[i][j];
                    col = j;
                }
            }
            min=a[0][col];
            for(k=0;k<3;k++)
            {
                if(a[k][col]<min)
                {
                    min=a[k][col];
                    row=k;
                }
            }
            if(max == min)
                printf("a[%d][%d]为鞍点,值为%d\n",row,col,a[row][col]);
        }
        if(max != min)
            printf("Not exist!\n");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 已采纳回答 11月23日
  • 创建了问题 11月22日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分