0

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

目前,我正在尝试打印出这样的开始

当输入为 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

4 回答 4

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

(未经测试的代码)

于 2012-05-23T15:46:38.430 回答
2

你就不能这样:

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

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

在您的情况下,对于您的 N 次迭代中的每一次,您 print ,跳转到新行, print *,然后跳转到新的迭代。所以当 N 为 7 时有 14 行。

于 2012-05-23T15:49:16.543 回答
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变量来帮助使其更清晰。

于 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 回答