2017-10-23 1 views
0

こんにちは私は現在のタワーよりも少ないか等しいタワーの数を探していますが、このソリューションは入力(NumOfTowers)のためにうまく機能しています< = 10しかし、コードはセグメンテーションフォルトで起こっているNumOfTowers> 10のために、私は前のタワーの数が現在のタワーの数より小さいかどうかを調べる

#include <iostream> 
#include <stack> 
using namespace std; 

int main() 
{ 
    std::stack<int> Towers; //for storing the Height of the towers 
    std::stack<int> TempTowers; // Temrory buffer stack 
    std::stack<int> CountTowers; //for storing the count of all previous 
            towers less than the current one 
    unsigned int NumTestCases,NumOfTowers,i,j,count=1,temp,temp_height; 
    cin>>NumTestCases; 
    cin>>NumOfTowers; 


    while(NumTestCases){ 

     while(!Towers.empty()){ 
      Towers.pop(); 
     } 
     for(i=0;i<NumOfTowers;i++){ 
      cin>>temp; 
      Towers.push(temp); 
     } 
     for(i=0;i<NumOfTowers-1;i++){ 
      count=1; 
      temp_height=Towers.top(); 
      Towers.pop(); 
      temp=Towers.top(); 

      while(temp<temp_height){ 
       count++; 
       TempTowers.push(temp); 
       Towers.pop(); 
       temp=Towers.top(); 
      } 

      CountTowers.push(count); 

      while(!TempTowers.empty()){ 
       temp=TempTowers.top(); 
       TempTowers.pop(); 
       Towers.push(temp); 
      } 

     }  
     NumTestCases--; 
     cout<<"1"<<" "; 
     while(!CountTowers.empty()){ 
      cout<<CountTowers.top()<<" "; 
      CountTowers.pop(); 
     } 
     cout<<"\n"; 
    } 

} 

任意のヘルプは素晴らしいことだ、ここでの問題見ることができませんでした。

+0

[ 'std名前空間を使用して;'悪い習慣である](HTTPS ://stackoverflow.com/q/1452721/2176813)、決して使用しないでください。 – tambre

+0

入力と希望する出力をリストしてください。そうでなければ、私たちは遠隔地ではなく、プログラムが何をしたいのか分からないので、質問は話題にはなりません。 – tambre

+0

デバッガを使用します。 –

答えて

1

変更この

while(temp<temp_height){ 
       count++; 
       TempTowers.push(temp); 
       Towers.pop();  // Popped the last element 
       temp=Towers.top(); // no more elements left 
      } 

この

while(!Towers.empty() && Towers.top() < temp_height) 
{ 
    ++count; 
    TempTowers.push(Towers.top()); 
    Towers.pop(); 
} 

に問題は入力の長さが、それのためにではなかったです。 I/p = {1, 2, 3, 4}の場合、空のスタックのtop()にアクセスしようとしたときにコードにエラーが発生します。

+0

素晴らしいソリューションが動作します。 – user2910111

0

あなたがここに、空のスタックに

while(temp<temp_height){   
     count++; 
     TempTowers.push(temp); 
     Towers.pop(); 
     temp=Towers.top(); 
    } 

変更follwing 2つのラインにこのラインをtemp=Towers.top();を呼び出している:

if (Towers.size() > 0) temp = Towers.top(); 
    else break; 
関連する問題