磁带平衡训练:为什么它返回0?

时间:2015-11-26 00:12:59

标签: c

***我不是在寻找解决方案帖子

我正在C中进行磁带均衡度训练,这就是我得到了多远:

// you can write to stdout for debugging purposes, e.g.
// printf("this is a debug message\n");
#include <stdio.h> 
#include <stdlib.h>

int solution(int A[], int N) {
    int difference;
    int smallest;
    int left;
    int right;

    if (N == 1) return 0;

    for (int i = 0; i < N; i++) {
        right += A[i];
    }

    for (int P = 1; P < N; P++) {
        int val = A[P - 1];
        right -= val;
        left += val;
        difference = abs(left - right);
        if (P == 1) smallest = difference;
        if (difference <= smallest) smallest = difference;
    }
    return smallest;
}

我一直认为我的解决方案正在返回0(我假设由于&#34; if(N == 1)&#34;行...我不确定为什么程序正在进入&#39;如果考虑到给定的例子是N = 5的情况。我放弃并将其转入,我的代码为所有Codility测试用例返回0。 每当我评论出这一行时,该程序将返回一些巨大的数字,我也不确定为什么。

我缺少某种C原则吗?我疯了,因为我不知道为什么程序会输入,如果是N!= 0的情况。

1 个答案:

答案 0 :(得分:1)

将初始化代码更改为

int smallest = 0;
int left = 0;
int right = 0;

一切都应该没问题。原因是你有不确定的行为。

也不是原因
if (N == 1) return 0;

您可以添加类似

的内容
printf("%d - %d\n", P, smallest);

for循环的末尾,并在每一步看到结果。您还会看到编译器的警告

  

编译器输出:
  func.c:在功能&#39;解决方案&#39;:
  功能:19:14:警告:&#39;离开&#39;可以在此函数中使用未初始化的函数[-Wyybe-uninitialized]

     left += val;
          ^  
     

func.c:13:15:警告:&#39;对&#39;可以在未经初始化的情况下使用   这个函数[-Wyybe-uninitialized]

     right += A[i];
           ^