用户定义的函数即使不应该返回0

时间:2018-09-16 21:40:07

标签: c function pointers

自定义输入:2 0 1 1 3 0 1 1 -1

预期输出:是。

我的输出:否

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int pv(int *a, int i){ //Function to create positional value.
if(a[i]!=0) return (a[i]+i);
else return 0;
}

int main() {
//code
int i,j,k,check=0;

int *a = (int *)malloc(1024*sizeof(int));
for(i=1;;i++) { scanf("%d",a+i);
if(*(a+i)==-1) { i--; break; } }
a = realloc(a,(i+1)*sizeof(int));//Just to decrease the size.

//Array of numbers inputed with designation from 1 formed.

int max_pv =0;

for(k=1;k<i;){


for(j=k+1;j<=pv(&a[k],k);){
    if(max_pv<pv(&a[j],j)) {
        max_pv = pv(&a[j],j);
        check =j;//Location of max_pv.
    }
}

k = check;
if(max_pv==0) { printf("NO"); return 0; }
if(max_pv>=i) { printf("YES"); return 0;}
max_pv = 0;
}
}

问题陈述:

将为您提供非负整数列表作为输入。该列表将以-1结尾,但-1不属于列表。此列表中数字的值表示其“跳转大小”。

例如,如果位置i处的数字为3,则该元素处的跳转大小为3。这意味着该位置右边3距离之内的所有位置都可以从该位置到达。单跳。更准确地说,如果位置i上的数字为3,则C先生可以在一次“跳跃”中从位置i转到位置i + 1或i + 2或i + 3。

列表的第一个数字位于位置1(与第一个元素为下标0的数组不同)。如果可以任意跳数到达,则位置j处的数字可以说是从位置i“可到达”的。 C先生首先跳到位置1(这是他的初始跳)。现在,他可以按照上述规则允许的任意顺序进行任意数量的跳跃。但是,所有跳转都在列表的右侧,即没有向后跳转。

打印,如果从位置1可以到达列表中的最后一个位置(即-1之前的位置),则输出为“是”(不带引号),否则请打印“否”(不带引号)。

我的问题:

我尝试在此代码上运行调试器,而我得到的错误是,即使k = 1,函数pv也返回零。

在此示例中,a [1] =2。因此该函数应返回a [1] + 2 =3。但是它返回0。

这是根据调试器确定的。如果其他任何问题仍然存在,请同时提及。

谢谢。

1 个答案:

答案 0 :(得分:0)

您正在传递指向a[j](或a[k])的指针,而不仅仅是apv的指针。