c - 从数组中查找最长的算术级数

标签 c

我有一个数字数组,例如[5,1,2,4,6,8,12],我想找到序列中最长算术级数的长度并打印它。最长的算术级数意味着具有公差的递增序列,在本例中为 [2,4,6,8]。

#include <stdio.h>

void main()
{
    int array[100], i, num,diff;
    printf("Enter the size of an array \n");

    scanf("%d", &num);

    printf("Enter the elements of the array \n");

    for (i = 0; i < num; i++) {
        scanf("%d", &array[i]);
    }

    printf("\n Numbers in a.p: ");

    for (i = 0; i < num; i++) {
        diff = array[i+1]-array[i];
        if (array[i]-diff == array[i+1]-diff);
        {
            printf("%d, ", array[i]);
        }
    }
    printf("\n Common difference:%d", diff);
}

最佳答案

像这样

#include <stdio.h>

int main(void){
#if DEBUG
    int array[] = {5,1,2,4,6,8,12};
    int num = sizeof(array)/sizeof(*array);
    int i, diff;
#else
    int array[100], i, num,diff;
    printf("Enter the size of an array \n");

    scanf("%d", &num);

    printf("Enter the elements of the array \n");

    for (i = 0; i < num; i++) {
        scanf("%d", &array[i]);
    }
#endif
    int j, len, longest_len = 2, longest_i = 0;

    for (i = 0; i < num - longest_len; i += len-1) {
        diff = array[i+1]-array[i];
        for(j = i+2; j < num && array[j-1]+diff == array[j]; ++j);
        len = j - i;
        if(longest_len < len){
            longest_len = len;
            longest_i = i;
        }
    }
    printf("\n Numbers in a.p: ");
    diff = array[longest_i+1] - array[longest_i];
    printf("[ ");
    for(i = 0; i < longest_len; ++i){
        printf("%d", array[longest_i + i]);
        if(i == longest_len-1)
            printf(" ]\n");
        else
            printf(", ");
    }
    printf("\n Common difference:%d", diff);
}

关于c - 从数组中查找最长的算术级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44381848/

相关文章:

c - 将函数输入到链表中

C++ 主 vs C 主

c - 我如何用 C 中的指针解决这个问题?

c - 在多级宏调用中将宏参数字符串化

c++ - 函数参数推送顺序

c - 文件签名C

找不到如何选择运行 C 程序的路径

c - 为什么从函数返回数组时收到警告?

c - 如何在 C 语言的 printf 输出中使用除法的模运算符显示余数

c - 如何将项目动态添加到动态数组