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

数组中两个相邻值之间的最大差值,C,c,arrays,C,Arrays,我想找出数组中两个相邻值之间的最大差值由于8和2之间的差异,最大差异为6。剩余差异等于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

我想找出数组中两个相邻值之间的最大差值由于
8
2
之间的差异,最大差异为
6
。剩余差异等于
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;
}
#包括
int main(int argc,字符**argv)
{
int n=6;
int tab[6]={1,2,8,4,5,6};
int diff=tab[1]-tab[0],maxdiff=diff,i;
对于(i=2;i maxdiff)
maxdiff=diff;
diff=tab[i]-tab[i-1];
}
printf(“%d\n”,差异);
返回0;
}

  • i好的,您将最大差异的信息保存到
    maxdiff
    中,但您总是打印
    diff
    ,这是最后一对数字之前的一对数字之间的差异(在本例中为
    1

    i
    应该上升到
    ,否则不考虑最后一对


    • 我会清理一下代码,然后检查
      n有两个问题。首先,打印的是
      diff
      ,而不是
      maxdiff
      。因此,您得到的是上一次差异的结果,而不是最大值

      第二,你没有取绝对值。这意味着
      {8,2,4}
      将得到2,而不是6

      最后,虽然这不是一个bug,但是可以从
      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;
      }
      
      #包括
      #包括
      int main(){
      int n=6;
      int tab[]={1,2,8,4,5,6};
      int-maxdiff=0;
      对于(int i=1;i最大差异){
      maxdiff=diff;
      }
      }
      printf(“%d\n”,maxdiff);
      返回0;
      }
      
      这看起来更像。。。乔治:但是当我把
      6
      改为
      26
      时,它仍然打印
      6
      ,而不是在这种情况下,
      21
      。使用调试器。这是因为您正在打印
      diff
      而不是
      maxdiff
      如果代码需要处理整个
      int
      范围内的
      int
      值,因为
      tab[i]-tab[i-1]
      可能会溢出,则此任务会更有趣。当然可以使用更宽的整数,但是如果任务是
      intmax\u t tab[6]
      ?嗯,还请注意唯一一个稍微微妙的错误:如果您为
      2
      8
      切换位置会怎么样?
      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;
      }
      
      #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;
      }