2014-01-25 141 views
0
#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; 
} 

我的評論技巧很糟糕,所以對我來說不要太難。我試圖儘可能清楚地解釋我想用我的代碼完成的事情,因爲我之前的問題中存在誤解。長度不斷增長的序列C++

TL; DR:總結起來,這是(或至少應該是)一個程序,它可以在數組中找到「增長」數字的最長序列長度。 「增長」意味着什麼?每一個下一個數字均等於或高於前一個數字的順序。例如在1 2 3 3 1 2中,「增長」序列爲1 2 3 3,其長度(輸出結果應該是4)。然而,由於某種未知的原因,當我編譯並輸入數組時,程序凍結而沒有給出任何輸出。任何想法可能導致什麼?我在這裏先向您的幫助表示感謝 !

+2

在調試器中逐步執行程序。 –

+2

歡迎來到Stack Overflow!要求人們發現代碼中的錯誤並不是特別有效。您應該使用調試器(或者添加打印語句)來分析問題,追蹤程序的進度,並將其與預期發生的情況進行比較。只要兩者發生分歧,那麼你就發現了你的問題。 (然後如有必要,你應該構建一個[最小測試用例](http://sscce.org)。) –

+0

@OliCharlesworth哦,我真的很抱歉。謝謝,但我該怎麼處理我的問題?刪除它或什麼?我不想因爲這一點而大量涌現。 – user3213110

回答

1

該行current = i;是錯誤的。您應該從之後的元素開始。還有一個,但是一旦你修復這個問題,它會更容易找到。這兩個錯誤都可以通過在propper地方添加+1來解決。

請注意,你真的應該使用調試器,像其他人暗示。它可能會在一分鐘內解決你的問題。請下次再做! :)

+0

上帝,你是救命恩人!非常感謝。我真的很抱歉讓你擔心這樣的擔憂,但是我對編程感到太新了,並且嘗試使用調試器時遇到了太多麻煩。 – user3213110

+0

在上面的評論中還提到了一件事,如果你不想使用調試器(當你第一次開始編程時肯定會感到困惑!),試着在你的代碼中加入大量的'cout',輸出不同點的不同變量的值。然後,確保它們與你所期望的相符。這基本上是調試器爲你做的,只是更漂亮^^ –