豆梨菜 2023-12-06 16:17 采纳率: 0%
浏览 4

PTA 查找二维数组中的最大值及其行列下标 有一个测试点错误


#include <stdio.h>
int  FindMaxbyCol(int *q,int row,int col,int *maxRow,int *maxCcol);
int main(void)
{
    int m,n;
    scanf("%d%d",&m,&n);
    int a[m][n];
    int max,maxr,maxc;
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);   
    }
     max=FindMaxbyCol(a[0],m,n,&maxr,&maxc);
    printf("%d %d %d\n",max,maxr,maxc);
    return 0;
}

/* 请在这里填写答案 */
#include<math.h>
int  FindMaxbyCol(int *q,int row,int col,int *maxRow,int *maxCcol)
{
    int i,j,max;
    max=*q;
    *maxRow=0;
    *maxCcol=0;
        for(j=1;j<col*row;j++)
        {
            if(max<*(q+j))
            {
                max=*(q+j);
                i=j;
            }
        }
    *maxRow=abs(i/col);
    *maxCcol=abs(i%col);
    return max;
}

  • 写回答

2条回答 默认 最新

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

    【以下回答由 GPT 生成】

    这个代码存在两个问题:

    1. 在函数FindMaxbyCol中,没有对变量i进行初始化。这会导致无法正确计算最大值的行和列下标。为了解决这个问题,我们可以在函数最开始给i一个初始值,例如i = 0

    2. 在函数FindMaxbyCol中,计算最大值的行和列下标的公式有误。当前使用的公式*maxRow = abs(i/col); *maxCol = abs(i%col);会导致最大值的列下标始终为正数。然而,这是一个错误的做法,因为行和列下标应该从0开始。为了解决这个问题,我们可以去掉abs()函数,直接将下标赋值给*maxRow*maxCol

    下面是修改后的代码:

    #include <stdio.h>
    
    // 函数原型声明
    int FindMaxbyCol(int *q, int row, int col, int *maxRow, int *maxCol);
    
    int main(void)
    {
        int m, n;
        scanf("%d%d", &m, &n);
    
        // 定义二维数组
        int a[m][n];
    
        int max, maxRow, maxCol;
        int i, j;
    
        // 输入数组元素
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
                scanf("%d", &a[i][j]);
        }
    
        // 调用函数查找最大值及其行列下标
        max = FindMaxbyCol(a[0], m, n, &maxRow, &maxCol);
    
        // 输出结果
        printf("%d %d %d\n", max, maxRow, maxCol);
    
        return 0;
    }
    
    // 函数定义:查找二维数组中的最大值及其行列下标
    int FindMaxbyCol(int *q, int row, int col, int *maxRow, int *maxCol)
    {
        int i = 0, j, max;
        max = *q;
        *maxRow = 0;
        *maxCol = 0;
    
        for (j = 1; j < col * row; j++)
        {
            if (max < *(q + j))
            {
                max = *(q + j);
                i = j;
            }
        }
    
        *maxRow = i / col;
        *maxCol = i % col;
    
        return max;
    }
    


    【相关推荐】



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

报告相同问题?

问题事件

  • 创建了问题 12月6日

悬赏问题

  • ¥15 如何在vue3中使用div标签时用background-image: url("'templates/demo/src/assets/医院名称.jpg'")页面不显示背景图片?
  • ¥15 运动会成绩管理系统的设计与实现
  • ¥15 matlab支持向量机使用错误
  • ¥99 利用C/C++语言,使用TCP/IP协议,编一个简易聊天程序
  • ¥15 如何使用python 实现对串口/dev/ttyUSB0进行上锁,使得该串口只能在一个python脚本中使用,其他脚本不能操作这个串口
  • ¥15 晶体塑性有限元——Damask求解
  • ¥30 设计一个图形用户界面来控制你机械臂的运动
  • ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
  • ¥15 前端返回pdf时不显示内容
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁