简单的嵌套循环问题。 *形状*

时间:2012-05-23 15:43:01

标签: c++ nested-loops shapes

我现在脑震荡,所以我想问一个非常简单的问题。

Currenly,我试图像这样打印出来

当输入为7时,输出为

* 
** 
* 
** 
* 
** 
*

这里我的代码是,它打印14次而不是7次,或者当我放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 个答案:

答案 0 :(得分:5)

对于每个N,您要打印两行,一行*,另一行*。而只是用打印单行基于该行的一个或两个星是奇数或偶数。

#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;
    }
  }
}

(未经测试的代码)

答案 1 :(得分:2)

你不能这样:

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

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

在您的情况下,对于N次迭代中的每次迭代,都打印,跳转到新行,打印* ,然后跳转到新的迭代。当N为7时,这14行。

答案 2 :(得分:1)

这是因为每次第一个for循环运行时,第二个循环也会运行。您无法打印***,并希望打印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变量来帮助它更加清晰。

答案 3 :(得分:0)

对于外循环的每个完整迭代,将打印以下内容:

*
**

如果你运行该循环7次,那么你将获得14行。试试这个,不需要内循环:

for (int i = 0; i < N ; i++) {          
    cout << "*" << endl;          
    cout << "**" << endl;     
}