关于ACM中Runtime Error at Test 1 (ACCESS_VIOLATION)的,程序和网址在下面,求大神解答!!

发布网友 发布时间:2022-04-24 13:56

我来回答

1个回答

热心网友 时间:2023-10-15 08:48


你把问题写的太复杂的,对应这个多case输出的问题,不用一次性全部输入解决后再一次性全输出,只要对每个case处理就行了。


for(j=1;j<=n[i];j++)

            {

                if(m%2==1)

                {

                    s[m]=s[m-1]+s[m-2];

                    m=m+1;

                }

                if(m%2==0)

                {

                    s[m]=s[m-1]+s[m-2]+s[m-3];

                    m=m+1;

                }

               if((m-(1))==n[i])

               {

                    printf("%d&#92;n",s[m-(1)]);

               }


这是你出问题的地方 。  你的有点太复杂了, 这里的m完全是多余的。 

你这里的话,m会不断累加。 

比如m=3.由于 m%2==1, 在这个分支里, m=m+1了,出来后,m=4,他不会回到for.. 这里,他会继续 if(m%2==0) 继续做。出来后m=5   当n[i]=3时,他还会继续循环,由于有j<=n[i]的*,不会死循环,但是m的值却是可以超出你定义的s[50]中的50,所以会有RE的报错。


写个大概的代码。
int a,b,c,d,i; 
int s[50]; 
while(scan("%d%d%d",&a,&b,&c)!=EOF) 
{
    s[1]=a; s[2]=b; 
    for(i=3;i<=c; i++)  
    {
        if(i%2==1) { s[i]=s[i-1]+s[i-2]; } 
        else { s[i]=s[i-1]+s[i-2]+s[i-3]; } 
    }
    printf("%d\n",s[c]); 
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com