C中的算术切片序列

时间:2017-06-12 04:43:12

标签: c math arithmetic-expressions

我试图编写一个获取整数列表并查找其中所有算术序列的函数。

A = [-1,1,3,3,3,2,1,0] 这个列表中有五个算术序列:(0,2),(2,4),(4,6),(4,7),(5,7) - 这些是序列的第一个和最后一个元素的索引。序列是由元素之间的差异导出的。

从上面的例子中可以看出 - 序列必须长于2个元素(否则它会在每两个元素之间找到一个序列)。

我需要编写的函数必须返回它在列表中找到的序列数 - 在这种情况下它应该返回5.

我有点卡住了 - 尝试了几种不同的方法但却失败了。我最近做的事情是:

#include<stdio.h>

int main() {
    // your code goes here
    long int A[]={-1, 1, 3, 3, 3, 2, 1, 0};
    //int N= sizeof(A)/sizeof(A[0]);
    int N=8;
    printf("%d", solution(A,N));
    return 0;
}


int solution (long int A[], int N)
{
    int numSlices=0;

    int tot;
    // Get the Consecutive Array
    for(int iOut=0; iOut<N; iOut++)
        {
        int startIndex = iOut;
        int endIndex;
        long int diff;
        for(int iIn=iOut; iIn<N-2; iIn++)
            {  
            if((A[iIn]-A[iIn+1]) == (A[iIn+1]-A[iIn+2]))
            continue;
            else
                {
                endIndex = iIn+1;
                iOut=endIndex+1;  
                printf ("SI = %d \t EI = %d \n", startIndex, endIndex);
                break;
                }
            }

        int ln=endIndex - startIndex;
        if (ln >=3)
        numSlices +=(ln-2)* (ln-1);
        // 1*
    }
 return numSlices;
}

1 个答案:

答案 0 :(得分:0)

这是一种更简单的方法。我发表评论以帮助您理解。

int solution (long int A[], int N)
{
    int i;
    int count = 0;
    for (i = 0; i < N - 1; i++) {
        int diff = A[i + 1] - A[i]; // get the difference of the current number to the next
        int temp = i + 1;
        // continue expanding the sequence as long as the difference is still the same
        while (temp < N - 1 && A[temp + 1] - A[temp] == diff) {
            count++;
            printf("Sequence found: %d, %d\n", i, temp); // display the sequence
            temp++;
        }
    }
    return count;
}