生长序列C ++的长度

时间:2014-01-25 22:57:04

标签: c++ arrays numbers sequence

#include <iostream>
using namespace std;

const int MAX_SIZE = 20;

int main()
{
    int n, a[MAX_SIZE]; // initialize array and its size
    cin >> n;                       //
    for (int i = 0; i < n; i++)     //  ===> array input
        cin >> a[i];                //
    int max = 0;    // initializing a variable indicating the length of the longest sequence
    int i;
    int current = 0;    // makes sure the each loop begins from where the last has concluded 
    do
    {
        int count = 0; // counter indicating the length of the sequence.. resets after each loop
        for (i = current; a[i] <= a[i + 1] && i < n - 1; i++) // loops until a lower than the previous number is found or the array ends
        {
            count++;
        }
        current = i;    // makes so that the next loop can start from where the last has concluded
        if (count > max) max = count;   // determines the longest "growing" sequence of numbers
    } while (i < n);    // when all of the array elements are checked the program is done
    cout << max << endl;
    return 0;
}

我的评论技巧很糟糕,所以不要太难对我说。我试图尽可能清楚地解释我想用我的代码完成的事情以及我以前的问题中的误解。

TL; DR:总而言之,这是(或者至少应该是)一个程序,它在阵列中找到“增长”数字的最长序列长度。 “成长”是什么意思?每个下一个数字均匀或高于前一个数字的序列。例如在1 2 3 3 1 2中,“增长”序列是1 2 3 3,其长度(输出应该是什么)是4.但是,由于某些未知原因,当我编译并输入数组时,程序冻结而没有给予任何输出..永远。什么可能导致这种想法?感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

current = i;行是错误的。您应该从之后的元素开始。。还有一个,但一旦你修复这个,它会更容易找到。可以通过在适当位置添加+1来修复这两个错误。

请注意,您确实应该使用调试器,就像其他人暗示的那样。它可能会在一分钟内解决您的问题。请下次再这样做! :)