1

私が受けている C++ クラスのプログラムを設計しています。教授は、"*" を使用して菱形を出力するプログラムを作成してほしいと言っています。私が立ち往生しているのは、私のプログラムが出力する行が多すぎることです。

それ以外の

 *
***
 *

出力しています

  *
 ***
*****
 ***
  *

これを機能させるには、コードをどのように変更しますか? 午前中ずっとオンラインで答えを探していましたが、運が悪かったです。

これが私のコードです:

#include <iostream>
using namespace std;

int main () {
    //Define Varaible
    int N;

   cout << "Please enter a postitive integer: ";
   cin  >> N;
   cout << "Here is your diamond." << endl << endl;

   for (int i = 0; i <= 2 * N; i++) {
      for (int j = 0; j <= 2 * N; j++) {
         if (i <= N) {
            if (j < N - i || j > N + i) {
               cout << ' ';
            }
            else {
               cout << '*';
            }
         }
         else {
            if (j < i - N || j > 3 * N - i) {
               cout << ' ';
            }
            else {
               cout << '*';
            }
         }
      }
      cout << endl;
   }
    return 0;
}
4

2 に答える 2

0

範囲 [0,5] (両方を含む) には 5 ではなく 6 つの要素があることを覚えておく必要があります。したがって、ループを実行して 5 回の反復を実行する場合は、通常、次のいずれかを実行します。

for( int i = 0; i < 5; ++i ) // do stuff

また

for( int i = 1; i <= 5; ++i ) // do stuff

C または C++ でプログラミングする場合、最初のバージョンは配列インデックスに適合し、プログラマーはその形式を使用する習慣があるため、より頻繁に使用されます。しかし、私が前に言ったように、あなたがそうするなら:

for( int i = 0; i <= 5; ++i ) // do stuff

それは6回の繰り返しになります。

于 2013-10-22T17:39:06.147 に答える
0

予想よりも多くの行を取得する理由は2 * N + 1、実際に必要なときに行数を作成しているためです2 * N - 1

修正は簡単ですN。入力を読み取った後、1 を減らします。

   cin  >> N;
   assert(N > 0);
   --N;

これにより、コードの残りの部分を変更する必要がなくなります。

于 2013-10-22T17:37:00.847 に答える