数组中两个相邻值之间的最大差异,C

时间:2017-07-05 09:24:36

标签: c arrays

我想找到数组中两个相邻值之间的最大差异。例如,对于数组int tab[6] = {1,2,8,4,5,6};,最大差异为6,因为8和{之间存在差异{1}}。剩余差异等于2。所以,我的程序结果应该是1。但是,我的程序打印6,我不知道问题出在哪里:

1

3 个答案:

答案 0 :(得分:5)

好吧,您将有关最大差异的信息保存到diff,但是您始终打印1,这是最后一对数字之前的差异(在此示例中为i )。

< n应升至n<=1,否则您不会考虑最后一对。

  • 我会稍微清理一下代码并检查abs角落情况。
  • 我猜您对值中的绝对差异感兴趣。您可以使用abs或通过相应地更改操作数的顺序来确保减法为您提供非负结果。 (int main(int argc, char **argv) { const int n = 6; int tab[n] = {1, 2, 8, 4, 5, 26}; if (n <= 1) return 0; //or whatever you have to do in this corner case else { int maxdiff = INT_MIN; for (int i = 1; i < n; i++) maxdiff = max(maxdiff, abs(tab[i] - tab[i - 1])); printf("%d\n", maxdiff); } return 0; } 更容易)

这是我的建议:

{{1}}

答案 1 :(得分:2)

  • i<n-1不会测试tab的最后两个值之间的差异 应该是i<n
  • 如果计算的最终差异最大,则if应低于差异计算。
  • 您应该打印maxdiff
  • 您还应该在差值计算中取绝对值,以考虑第一个数字大于第二个数字(正如@Felix Palmen所指出的那样)。您可以使用abs中定义的stdlib.h功能,也可以自己编写diff > 0? diff : -diff

固定代码:

int main(int argc, char **argv)
{
    int n = 6;
    int tab[6] = {1,2,8,4,5,6};
    int diff = abs(tab[1] - tab[0]), maxdiff = diff, i;

    for(i=2; i<n; i++)
    {
        diff = abs(tab[i] - tab[i-1]);

        if(diff > maxdiff)
            maxdiff = diff;
    }

    printf("Max difference: %d\n", maxdiff);

    return 0;
}

答案 2 :(得分:1)

有两个问题。首先,您要打印diff而不是maxdiff。所以你得到了最后一个差异的结果,而不是最大值。

其次,你没有取绝对值。这意味着{8,2,4}将导致2而不是6。

最后,虽然这不是一个错误,但可以从maxdiff = 0开始删除一堆重复。

样式注释:在一行上声明多个变量很难阅读。在一行上声明并初始化很难阅读。不要这样做。

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

int main() {
    int n = 6;
    int tab[] = {1,2,8,4,5,6};
    int maxdiff = 0;

    for(int i=1; i < n; i++) {
        int diff = abs(tab[i] - tab[i-1]);
        if(diff > maxdiff) {
            maxdiff = diff;
        }
    }

    printf("%d\n", maxdiff);

    return 0;
}