首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >codechef练习问题中的运行时错误

codechef练习问题中的运行时错误
EN

Stack Overflow用户
提问于 2014-07-02 11:30:26
回答 2查看 137关注 0票数 2

当我尝试在codechef上运行它时,当代码在我的计算机上使用各种测试输入时运行良好时,我得到了以下代码中的一个运行时错误。我也记住了问题中给出的约束,但我仍然无法调试它。问题不是来自任何比赛,而是一个练习问题。请指出你能发现的任何错误。实际编解码问题

代码语言:javascript
复制
#include<stdio.h>

int cash[101][101]={0};
int rec[101][2];
int ri=0;
int sumx(int mat[101][101],int i,int j,int lines)
{
    int n=0,a=0,b=0;
    if(cash[i][j]!=0)
    {
        return cash[i][j];
    }
    else if(i==lines-2)
    {
        n=(mat[i+1][j]>mat[i+1][j+1])?mat[i+1][j]:mat[i+1][j+1];
        cash[i][j]=n+mat[i][j];
        rec[ri][0]=i;
        rec[ri++][1]=j;
        return n+mat[i][j];
    }
    else
    {
        a=sumx(mat,i+1,j,lines);
        b=sumx(mat,i+1,j+1,lines);
        n=(a>b)?a:b;
        cash[i][j]=n+mat[i][j];
        rec[ri][0]=i;
        rec[ri++][1]=j;
        return n+mat[i][j];
    }
}

int main()
{
    int i=0,k=0;
    int lines=0,n=0;
    int r=0;
    int tc=0;
    int mat[101][101];
    scanf("%d",&tc);
    while(tc--)
    {
        scanf("%d",&lines);
        i=0;
        k=0;
        while(i<lines)
        {
            while(k<=i)
            {
                scanf("%d",&mat[i][k]);
                k++;
            }
            k=0;
            i++;
        }
        if(lines==1)
        {
            r=mat[0][0];
        }
        else
        {
            r=sumx(mat,0,0,lines);
        }
        i=0;
        while(i<ri)
        {
            cash[(rec[i][0])][(rec[i][1])]=0;
            rec[i][0]=0;
            rec[i][1]=0;
            i++;
        }
        ri=0;
        printf("%d\n",r);
    }
    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-03 21:05:25

错误与行有关

代码语言:javascript
复制
while(i<ri)
        {
            cash[(rec[i][0])][(rec[i][1])]=0;
            rec[i][0]=0;
            rec[i][1]=0;
            i++;
        }

在某些情况下,可以不定义reci reci的值,即它们可能返回垃圾值。

您可以使用memset将值更改为0。

代码语言:javascript
复制
memset(rec,0,sizeof(rec));
memset(cash,0,sizeof(cash));

我运行了你的解决方案,在你的算法实现中有一个错误--试着自己找

我可以为您提供一个测试用例(使用测试用例生成器),它会失败。

代码语言:javascript
复制
21
79 
89 28 
14 6 63 
96 58 67 48 
80 8 22 27 8 
24 21 23 96 97 72 
38 90 95 83 57 60 94 
13 96 9 24 65 27 67 40 
26 20 58 42 29 8 52 49 37 
80 65 65 34 79 10 89 11 20 84 
57 59 72 79 51 67 84 70 43 62 96 
16 4 18 9 5 40 34 2 15 4 28 50 
29 1 60 39 28 92 38 65 95 57 10 71 37 
25 78 96 43 17 51 88 19 0 30 20 80 39 35 
55 41 63 76 4 20 97 72 43 93 76 11 82 33 25 
61 85 41 77 42 90 20 5 69 51 4 54 41 18 83 72 
12 56 21 82 7 1 84 26 47 26 22 52 84 39 75 70 89 
12 39 83 92 49 20 35 20 31 96 66 75 48 79 13 51 49 50 
42 81 0 58 70 40 16 83 27 34 79 64 14 26 19 22 38 55 93 
64 81 26 29 47 22 73 61 3 2 61 99 18 43 33 10 13 46 24 53 
5 56 0 0 3 0 71 12 82 34 17 11 14 51 1 82 73 53 85 75 89

正确答案是1431,而代码返回1299

票数 0
EN

Stack Overflow用户

发布于 2014-07-04 03:35:04

@随机化:代码运行良好,输出为1431,而不是1299。无论如何,正如您建议从reci reci生成的垃圾一样,在我看来,reci reci可能产生垃圾,因为我只访问了用完的单元格。然而,memset消除了对rec的需求,因此现金很容易被重置为零。我所做的就是删除rec矩阵并使用memset重置现金,代码在codechef上运行良好。我不知道它是如何产生垃圾的,尽管如此,它在codechef上被接受了,因为我删除了rec部分。谢谢你的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24529984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档