每两个相邻数之间的绝对差的总和在阵列中是最大的

时间:2016-05-28 12:56:45

标签: c

例如对于(1,2,7),M = [1-7] + [2-7},得到M = 11 而不是直接计算它给出6 [1-2] + [2-7] 有人请帮我解决这个问题?我使用数组来查找最大值和最小值,但之后我不知道如何继续。

#include <stdio.h>

int main()
{
    long int a[100000];
    int n,i;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%lu",&a[i]);
    }
    int max=a[0];
    int min=a[0];
    for(int i=0;i<n;i++){
        if(a[i]>max){
          max=a[i];  
        }else if(a[i]<min){
            min=a[i];
        }
    }
    printf("%d\n",max);
    printf("%d\n",min);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

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

int main(void){
    long int a[100000], max = LONG_MIN;
    int n;

    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%lu", &a[i]);
        if(a[i] > max)
            max = a[i];
    }
    long long int sum = 0;
    for(int i = 0; i < n; i++){
        sum += labs(a[i] - max);
    }
    printf("%lld\n", sum);

    return 0;
}

答案 1 :(得分:1)

不需要给出OP的数组“例如(1,2,7), M =[1-7]+[2-7}给出M=11

这是
(max - a[0]) + (max - a[1]) + ... + (max - a[n-1]) - &gt; n*max - sum(a[])

#include <stdio.h>

int main(void) {
    int max=INT_MIN;
    int min=INT_MAX;
    long long sum = 0;
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
      int a;
      if (scanf("%d",&a) != 1) {
        puts("fail");
        return -1;
      }
      if (a > max) max = a;
      if (a > min) min = a;
      sum += a;
    }
    printf("min %d\n", min);
    printf("max %d\n", max);

    printf("m %lld\n", 1LL*n*max - sum);
    return 0;
}