gpt4 book ai didi

计算 C 列表中的符号变化

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:37 25 4
gpt4 key购买 nike

我必须获得 double 列表中符号变化的次数。例如,如果有这样一个列表:“1, -1, -1, 1”,相邻元素之间有 2 个符号变化。我这样试过,但由于某种原因,如果我尝试编译它,程序会崩溃:

int number_of_sign_changes(DoubleList* list) {
int changes = 0;
for (DoubleNode *n = list->first; n != NULL; n = n->next) {
if ((n->value >= 0) && (n->next->value < 0)) {
changes += 1;
} else if ((n->value < 0) && (n->next->value >= 0)) {
changes += 1;
}
}
return changes;
}

循环绝对有效。我在其他功能中尝试过,但在这里它不起作用。有人有想法吗?顺便说一句,您实际上可以将 2 个 if 语句放入 1 个中,我也尝试过但同样的问题。

最佳答案

这本质上是一个围栏问题。可能的符号更改数比列表中的元素数少 1,因此当您检查每一项时,您可以知道您做错了什么。问题实际上发生在检查列表中的最后一项时 - 它试图检查对“下一个”项目的符号更改,但没有,因为 n->nextNULL

这可以通过对 for 循环中的终止条件进行简单更改来解决,如下所示:

int number_of_sign_changes(DoubleList* list) {
int changes = 0;
for (DoubleNode *n = list->first; n != NULL && n->next != NULL; n = n->next) {
if ((n->value >= 0) && (n->next->value < 0)) {
changes += 1;
} else if ((n->value < 0) && (n->next->value >= 0)) {
changes += 1;
}
}
return changes;
}

关于计算 C 列表中的符号变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41264297/

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