gpt4 book ai didi

c - 磁带平衡 Codility 培训 : Why Does It Return 0?

转载 作者:行者123 更新时间:2023-11-30 15:14:45 27 4
gpt4 key购买 nike

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

我正在参加 C 语言的 Tape Equilibrium Codility 培训,这就是我所取得的进展:

// 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(我假设是由于“if (N == 1)”行...考虑到给定的情况,我不确定为什么程序会输入“if”情况例如 N=5)。我放弃了并上交了这个,我的代码对于所有 Codility 测试用例都返回 0。每当我注释掉该行时,程序都会返回一些巨大的数字,我也不知道为什么。

我是否缺少某种 C 原理?我要疯了,因为我不知道为什么程序会输入 if case if N!=0。

最佳答案

将初始化代码更改为

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

一切都应该没问题。原因是你有未定义的行为。原因也不在

if (N == 1) return 0;

您可以添加类似的内容

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

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

Compiler output:
func.c: In function 'solution':
func.c:19:14: warning: 'left' may be used uninitialized in this function [-Wmaybe-uninitialized]

     left += val;
^

func.c:13:15: warning: 'right' may be used uninitialized in this function [-Wmaybe-uninitialized]

     right += A[i];
^

关于c - 磁带平衡 Codility 培训 : Why Does It Return 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33928628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com