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

Bri*_*own -2 c arrays

我想找到在array.For情况下两个相邻值之间的差异最大,为阵列int tab[6] = {1,2,8,4,5,6};的最大差异是6因为之间的差异,8以及2.剩下的差异等于1.所以,我的程序的结果应该是6.但是,我的程序打印1,我不知道问题出在哪里:

#include <stdio.h>

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

    for(i=2; i<n-1; i++)
    {
        if(diff > maxdiff)
            maxdiff = diff;

        diff = tab[i] - tab[i-1];
    }

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*aro 5

好吧,你保留有关最大差异的信息,maxdiff但是你总是打印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;
}
Run Code Online (Sandbox Code Playgroud)