使用C程序的数组的中间元素的总和

时间:2016-04-05 10:05:42

标签: c arrays

如何找到数组中间元素的总和,或者检查条件的总和是否为15?

例如,数组{3,2,10, 4, 1,6,9}居中为15,因为序列1041 {{1} }到sums,序列前面有两个元素(153),后跟两个元素(26)。

因此,请返回9,因为序列1总和为10, 4, 1,并且前面有两个元素,后跟两个元素。请注意,还有另一个序列汇总为15156)。只要至少其中一个序列居中,数组就可以有多个总和为9的序列。

同样,对于数组15,返回{2, 10, 4, 1, 6, 9}因为(0)前面有一个元素,但后跟两个元素。 (10, 4, 1)前面有五个元素,但后面没有。因此,两者都没有资格作为中心。

9, 6

2 个答案:

答案 0 :(得分:3)

我们应该澄清我们使用的术语:

  

如果序列的右侧和左侧有多少个元素,则序列居中

     

输入数组A的长度为n

如果我们使用这些定义,我们应该只考虑以下定义的序列:

  1. max_p = (n-1)/2
  2. p
  3. [0..max_p]
  4. sequence是输入数组中的元素,其索引属于[p, (n-1)-p]
  5. 编写一个循环于p的可能值的程序,然后将数组元素从索引p求和到(n-1)-p,这应该是直截了当的。

    这将导致至少O(n²)次操作。

    您还可以注意到,从ij的元素总和,我们称之为S(i,j)是从i+1到{{1}的元素之和加上j-1

    A[i]+A[j]

    这种观察应该引导您使用S(i,j) = S(i+1,j-1) + A[i] + A[j] 操作和单个循环的算法。

    O(n)

    请注意,此算法可以处理输入数组中的正值和负值。

答案 1 :(得分:0)

假设我们谈论的是中三, 从设计角度来看:检查奇数,如果不是则返回0。 然后从整个数组中减去3,并将余数除以2。 然后,在进行检查之前,从数组中的这些元素开始,添加三次。

我刚刚说过的代码示例:

{
    if(len%2==0)
    {
        return 0;
    }
    int a,b=0,sum=0;
    a=len-3;
    a/=2;
    for (;b<3;b++)
    {
        next=array[a+b];
        sum+=next;
    }
    if (sum==15)
    {
        return 1;
    }
    return 0;
}