洞洞幺# 2023-12-09 15:03 采纳率: 66.7%
浏览 11

找鞍点我想了好几种思路这个到底有什么问题呀

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。


```c

#include<stdio.h>
int main()
{
    int a[10][10];
    int n;
    scanf("%d\n",&n);
    int i,j,max,s[6],m=0,d=0,f=0,l=0,h=0;
    for(i=0;i<n;i++)
    {
        for(j=1;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
        scanf("\n");
    }
    for(i=0;i<n;i++)
    {
        m=0;
        max=a[i][0];
        for(j=0;j<n;j++)
        {
            if(a[i][j]>max)
            {max=a[i][j];}
        }
        for(j=0;j<n;j++)
        {
            if(a[i][j]==max)
            {
                s[m]=j;
                m++;
            }
        }
        for(l=0;l<m;l++)
        {
            for(h=0;h<n;h++)
            {
              f=s[l];
              if(max>a[h][f])
                break;
              if(h==n-1)
                {
                d=1;
                printf("%d %d",i,f);
                }
            }
        }
        if(d==1)
        break;
    }
    if(d==0)
    printf("NONE");
}

```

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-09 16:18
    关注

    【以下回答由 GPT 生成】

    #include <stdio.h>
    
    int main()
    {
        int matrix[6][6];
        int n;
        printf("请输入一个正整数n(1≤n≤6):");
        scanf("%d", &n);
    
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                scanf("%d", &matrix[i][j]);
            }
        }
    
        int saddlePointExist = 0;
    
        for(int i = 0; i < n; i++) {
            int rowMax = matrix[i][0];
            int rowMaxIndex = 0;
    
            // 找出当前行的最大值以及其索引
            for(int j = 1; j < n; j++) {
                if(matrix[i][j] > rowMax) {
                    rowMax = matrix[i][j];
                    rowMaxIndex = j;
                }
            }
    
            // 检查当前最大值是否为当前列的最小值
            int isMinColumn = 1;
            for(int k = 0; k < n; k++) {
                if(matrix[k][rowMaxIndex] < rowMax) {
                    isMinColumn = 0;
                    break;
                }
            }
    
            // 输出鞍点位置
            if(isMinColumn) {
                printf("鞍点的位置为:%d %d\n", i, rowMaxIndex);
                saddlePointExist = 1;
            }
        }
    
        if(!saddlePointExist) {
            printf("NONE\n");
        }
    }
    

    优化方案如下: 1. 在查找当前行最大值时,记录最大值的索引rowMaxIndex。 2. 在检查当前列是否为最小列时,直接比较当前列的值是否小于当前行的最大值rowMax即可,不需要比较是否相等。 3. 输出鞍点位置时,只需要判断当前列为最小列即可,不需要再判断是否为0。 4. 在输出"NONE"时,可以直接使用else语句。

    这样修改后的代码逻辑更加清晰,也更容易理解和调试。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月9日

悬赏问题

  • ¥60 db2move nlzxams import 导出db2备份数据报错
  • ¥15 关于#python#的问题:全文总结功能咨询
  • ¥15 俄罗斯方块中无法同时消除多个满行
  • ¥15 c#转安卓 java html
  • ¥15 使用gojs3.0,如何在nodeDataArray设置好text的位置,再go.TextBlock alignment中进行相应的改变
  • ¥15 psfusion图像融合指标很低
  • ¥15 银河麒麟linux系统如何修改/etc/hosts权限为777
  • ¥50 医院HIS系统代码、逻辑学习
  • ¥30 docker离线安装mysql报错,如何解决?
  • ¥15 构建工单的总账影响在哪里查询或修改