0

私は今脳ショックを受けているので、非常に簡単な質問をしたいと思いました。

現在、私はこのようなスタートを印刷しようとしています

入力が7の場合、出力は

* 
** 
* 
** 
* 
** 
*

そして、ここで私のコードは、7回ではなく14回印刷されるか、入れN/2ても奇数は印刷されません。

#include <iostream>
using namespace std;

int main () {


    int N;
    cout << " Please enter N " ;
    cin >> N;


    for (int i = 0; i < N ; i++) {

        cout << "*" << endl;

        for (int j = 0; j < 2; j++) {

            cout << "*" ;
        }
        cout << endl;
    }
}
4

4 に答える 4

5

それぞれについて、1行とN2行の2行を印刷しています。代わりに、線に基づいて1つまたは2つの星が奇数または偶数である単一の線を印刷するだけです。**

#include <iostream>

int main ()
{
  unsigned int N;
  cout << " Please enter N " ;
  cin >> N;

  for(unsigned int i = 0; i < N; ++i)
  {
    if(i%2 == 0)
    {
      std::cout << "*" << std::endl;
    }
    else
    {
      std::cout << "**" << std::endl;
    }
  }
}

(テストされていないコード)

于 2012-05-23T15:46:38.430 に答える
2

あなたはこのように行くことはできません:

for (int i = 0; i < N ; i++) {

    if (i%2 == 0)
    {
        cout << "**" << endl;
    }
    else
    {
        cout << "*" << endl;
    }
}

あなたの場合、N回の反復ごとに、印刷し、新しい行にジャンプし、*を印刷してから、新しい反復にジャンプします。したがって、Nが7の場合は14行です。

于 2012-05-23T15:49:16.543 に答える
1

これは、最初のループが実行されるたびforに、2番目のループも実行されるためです。両方*を印刷することはできず、時間**の印刷を期待することはできませんN(常に時間を印刷します2 * N)。*またはのいずれかを印刷する必要があります**が、両方を同時に印刷することはできません。簡単な例:

bool alternate = false;
for (int i = 0; i < N ; i++) {

    if (alternate) {
        cout << "*" << endl;
    } else {
        cout << "**" << endl;
    }

    alternate = !alternate;
}

alternate変数を削除して、i偶数か奇数かを確認することもできますが(のようなものi & 1を使用)、alternate変数を使用して明確にしました。

于 2012-05-23T15:47:29.493 に答える
0

外側のループが完全に繰り返されるたびに、次のように出力されます。

*
**

そのループを7回実行すると、14行になります。代わりにこれを試してください。内側のループは必要ありません。

for (int i = 0; i < N ; i++) {          
    cout << "*" << endl;          
    cout << "**" << endl;     
}
于 2012-05-23T15:48:47.247 に答える