2017-10-09 6 views
0

私はC++を初めて使っていて、整数を入力して '*'と '。'を使って2 * n + 1サイズの蝶ネクタイの形にするという割り当てを持っています。例えば:ドットと '*'を使って蝶ネクタイを描く

入力:3

出力:

*.....* 
    **...** 
    ***.*** 
    ******* 
    ***.*** 
    **...** 
    *.....* 

ので、私はこれで作ってみた:

#include <iostream> 

    using namespace std; 
    int main() 
    { 
    int n; 
    cin>>n; 
    for(int i=1;i<=n+1;i++) 
    { 
     for (int p=i;p>=1;p--) 
     cout<<"* "; 
     for (int j=n;j>(i-1);j--) 
     cout<<". "; 
     for (int j=n;j>i;j--) 
     cout<<". "; 
     for (int j=i;j>=1;j--) 
     cout<<"* "; 
     cout<<endl; 
    } 

    for(int i=n;i>=1;i--) 
    { 
     for (int j=i;j>=1;j--) 
     cout<<"* "; 
     for (int j=n;j>(i-1);j--) 
     cout<<". "; 
     for (int j=n;j>i;j--) 
     cout<<". "; 
     for (int j=i;j>=1;j--) 
     cout<<"* "; 
     cout<<endl; 
    } 
    } 

が、私の出力ルックスこのような:

入力:3

出力:私はループを微調整しようとした場合、それはできませんので

*.....* 
    **...** 
    ***.*** 
    ******** //<--1 redundant * at this row// 
    ***.*** 
    **...** 
    *.....* 

ので、私は思ったんだけど、それを削除するにはどのような方法がありますもはや同じ形。または、この割り当てを行うより効率的な方法はありますか?私は何時間もそれをしてきました!ありがとう!

+0

「スター」とは何ですか? – user4581301

+1

コードをインデントしてみてください。インデントはコンパイラにとって重要ではありませんが、コードを読んでいる人間にとっては重要です。 –

+0

また、Eric Lippertの[小さなプログラムのデバッグ方法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を読んで、デバッガを使用してコードを1行ずつステップ実行する方法 –

答えて

1

if文で問題を解決できると思います。 最初のループの4番目の内部forループ内のif文。

for (int j=i;j>=1;j--){ 
     if(i != n+1 || j != 1){ 
      cout<<"* "; 
     } 
    } 
    cout << endl; 

iあなたは余分なスターとするときj == 1文はその最後の星が表示されません場合は、このように、その中央の列の最後の星を持っているを持っているときi == n+1意味中段にあります。あなたはそれが働くどんな入力でもこれを試すことができます。

+0

ありがとうございました!それは問題を解決した、私はこの代わりに使用することを考えていないと信じることはできません! Tho私はこれを上記の混乱が見るのがとても醜いので、できるだけ最小限に抑える方法に取り組んでいます。私はすぐにC++でうまくいくことを期待しています! –

+0

@PhạmSonsn私が質問に答えたと思うなら、それを受け入れてください(https://stackoverflow.com/help/someone-answers)。 – Tyger

+0

完了! @タイガー:D –

関連する問題