***我不是在寻找解决方案帖子
我正在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的情况。
答案 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]; ^