噜啦噜啦噜呼呼呼 2024-04-06 16:55 采纳率: 70.7%
浏览 10

蓝桥杯动态规划拿金币

img

帮我看一下我的代码哪里有问题,为什么没有输入直接就跳了,不李姐

#include<stdio.h>
#include<string.h>
int max(int x,int y)
{
    return x>y? x:y;
}

int main()
{
    int n,arr[1000][1000],i,j,dp[1000][1000]; //dp[i][j]表示走到arr[i][j]能拿到的最大金币数
    scanf("%d",&n);
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            scanf("%d",&arr[i][j]);
    //memset(dp,0,sizeof(dp));
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(i==0&&j==0)
                dp[i][j]=arr[i][j];
            else if(i==0)
                dp[i][j]=dp[i][j-1]+arr[i][j];
            else if(j==0)
                dp[i][j]=dp[i-1][j]+arr[i][j];
            else
                dp[i][j]=max(dp[i-1][j],dp[i][j-1])+arr[i][j];
        }    
    }
    printf("%d",dp[n-1][n-1]);
    return 0;
}

img

  • 写回答

2条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-15 21:49
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    问题:请帮我看一下我的代码哪里有问题,为什么没有输入直接就跳了,不李姐?

    解决方案:

    1. 问题分析:

    根据给出的代码,如果输入数据后程序直接退出,则很有可能是输入数据的格式或数据读取过程出现了问题。

    1. 代码问题:

    对于这段代码:

    scanf("%d",&n);
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            scanf("%d",&arr[i][j]);
    

    需要注意的几个问题:

    • 代码中的arr数组可能会溢出,因为数组的大小未确定。
    • 没有对输入的数据进行有效性校验。没有校验输入数据是否满足题目要求,如是否为正整数,是否小于等于1000。
    • 代码缺乏完备性,没有考虑数据输入不完整或输入错误的情况。
    1. 代码修改:

    改正上述问题的方式如下:

    • 定义数组时指定大小:
    int arr[1000][1000], dp[1000][1000];
    
    • 添加输入数据的有效性校验:
    scanf("%d",&n);
    if(n<=0 || n>1000){
        printf("输入的数据不符合要求!");
        return -1; //退出程序
    }
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&arr[i][j]);
            if(arr[i][j]<=0 || arr[i][j]>1000){
                printf("输入的数据不符合要求!");
                return -1; //退出程序
            }
        }
    }
    
    • 添加输入数据不完整或输入错误的处理:
    if(scanf("%d",&n)!=1){
        printf("数据输入不完整或输入错误!");
        return -1; //退出程序
    }
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            if(scanf("%d",&arr[i][j])!=1){
                printf("数据输入不完整或输入错误!");
                return -1; //退出程序
            }
            if(arr[i][j]<=0 || arr[i][j]>1000){
                printf("输入的数据不符合要求!");
                return -1; //退出程序
            }
        }
    }
    

    根据以上三个步骤,修复代码后,该程序就能正常运行了。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月6日

悬赏问题

  • ¥15 像这种代码要怎么跑起来?
  • ¥15 怎么改成循环输入删除(语言-c语言)
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件