2016-10-10 20 views
-5
int main(){ 
    int n; 
    cin >> n; 
    vector<int> arr(n); 
    for(int i =0; i < n; i++){ 
     cin >> arr[i]; 
    } 
    for(int i = n-1; n-1 >= 0; i--){ 
     cout << " "<< arr[i] << " "; 
    } 
    return 0; 
} 

私は間違っていますか?私は正しい軌道に乗っているように感じますが、何が間違っているのか分かりません。これはハッカーのランク上の配列DSの問題です。残念ながら私は彼らが答えを明らかにするとは思わない。逆配列C++?私は間違って何をしていますか?

+2

を理由について、あなたは行くと読んでいない(https://www.tutorialspoint.com/cplusplus/cpp_loop_types.htm) – user3286661

+2

あなたは 'を使用することができませんでしたstd :: reverse'。 – juanchopanza

+1

(int i = n-1; n-1> = 0; i--)... – Treycos

答えて

1

i >= 0に条件を変更してください。n - 1 >= 0が無限ループにつながる可能性があります。しかし、どちらの場合でも、必要な結果が得られないため、そうしているかどうかは関係ありません。

for(int i = n-1; i >= 0; i--){ 
    std::cout << " "<< arr[i] << " "; 
} 

またはstd::reverseを使用してください。

std::reverse(arr.begin(), arr.end()); 
for (int i = 0; i < n; i++){ 
    std::cout << arr[i] << " "; 
} 

live hereを参照してください。

+2

または['std :: reverse']を使用してください(http://en.cppreference.com/w/cpp/algorithm/reverse) – user4581301

+0

はい!もちろん。 –

0
for(int i = n-1; n-1 >= 0; i--){ 
    cout << " "<< arr[i] << " "; 
} 

あなたは無限ループにつながるnは、減少しませんnは< = 0

0

車輪の再発明をしないであれば、標準ライブラリは、ここであなたを助けるでしょう。
使用std::reverse:両方の場合において

int main() 
{ 
    std::vector<int> vec; 
    int n = 0; 
    int temp = 0; 

    std::cin >> n; 
    for (int i = 0; i != n; ++i) { 
     std::cin >> temp; 
     vec.emplace_back(temp); 
    } 

    std::reverse(std::begin(vec), std::end(vec)); 
} 
0

、必要に応じて(第2のループで)デクリメント/(最初のループで)I = 0変数を初期化し、カウントアップをとっています。 しかし、2番目のループでは、nの値を決して変更しないという事実にもかかわらず、条件をnに設定しました。これは、n-1がプログラム全体にわたって一定である限り、無限ループにつながります。 これを整理するには、以下のコードのように条件をi-1> 0に変更する必要があります。

for(int i = n-1; i-1 >= 0; i--) 
{ 
    cout << " "<< arr[i] << " "; 
} 

このhelps.Cheersの場合は、アップしてください。

+0

私は正しい軌道に乗っていたようですが、私はforループ条件を変更するだけでした。 – HecticHiccups

0

for(int i = n-1; n-1 >= 0; i--)

ここで、あなたはあなたのforループの条件で間違いをしました。 n-1にはiを割り当て、デクリメントセクションではi--を使用しました。したがって、ループを停止するか、またはループの終了値がiの条件を使用する必要があります。それでは、次のように条件を変更:[ループ]

for(int i = n-1; i >= 0; i--) 
関連する問題