噜啦噜啦噜呼呼呼 2024-04-06 16:55 采纳率: 66.3%
浏览 13
已结题

蓝桥杯动态规划拿金币

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条回答 默认 最新

  • 关注

    晚上好🌙🌙🌙
    本答案参考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; //退出程序
            }
        }
    }
    

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

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月1日
  • 创建了问题 4月6日

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含