如何使用嵌套的for循环来编写菱形

时间:2016-10-07 17:29:55

标签: c++ for-loop nested-loops

好吧,所以我对嵌套循环很新,并且很难理解它们。

提示:

编写一个打印下图所示形状的程序。您可以使用输出语句打印单个星号(*)或单个空白。最大限度地使用重复(使用嵌套的结构)并最小化输出语句的数量。

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

到目前为止我所拥有的:

 for (int row = 7; row <= 13; row = row + 2){
     for (int col = 1; col <= row; col++)
         cout << '*';
     cout << '\n';
 }



 for ( int row = 12; row >= 7; row = row - 2) {
     for ( int col = 1; col <= row; col++ )
         cout << '*';
     cout << '\n';
 }

我无法弄清楚间距?前三行的空格减少一个,后三行的空格减去一。我该如何添加它们?

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。这种任务最难的部分是找出“规则”。或者根据行的索引计算每行中空白量和星数的公式。一旦你想到将其翻译成一个程序就更容易了。

编辑:虽然这个解释使用特定的作业作为例子,但这是一种通用的方法,如果学会了,它应该帮助你和其他人解决这类编程问题。

您可以通过使用索引

标记行来简化操作
0      *******
1     *********
2    ***********
3   *************
4    ***********
5     *********
6      *******

然后创建一个输入 - 输出表

row  blanks *s
0    6       7
1    5       9
2    4      11
3    3      13
4    4      11
5    5       9
6    6       7

这个表可以扩展(推广)到从1NN>=1)的任意数量的行,但它真的适用于N>=3它开始有意义了。有时应该决定如何处理N偶数奇数值,但通常可以从您提供的样本中找出。 在您的示例中,行数为7,因此N=7

通过了解您的输入N,您可以通过将值替换为计算(作为N的函数)来开始推广上表

N=7

row  blanks  *s
0    N-1     N+0
1    N-2     N+2
2    N-3     N+4
3    N-4     N+6
4    N-3     N+4
5    N-2     N+2
6    N-1     N+0

此时如果您无法确定所有行的单个公式,只需引入新的辅助变量。我们可以看到在表格的上半部分我们看到增加的校正值(+ 0,+ 2,+ 4,+ 6),在表格的下半部分我们看到减少的校正值(+ 6,+ 4,+ 2,+ 0)。因此,让我们介绍一个辅助变量,它将帮助我们处理表的下半部分(类似于row索引如何帮助我们使用上半部分)。我将此变量称为help1

N=7

row  help1  blanks  *s
0    6      N-1     N+0
1    5      N-2     N+2
2    4      N-3     N+4
3    3      N-4     N+6
4    2      N-3     N+4
5    1      N-2     N+2
6    0      N-1     N+0

此时如果模式仍然难以概括,您可以在2种情况下拆分问题并在程序中使用if {} else {}语句。一个用于表格的上半部分(if部分),一个用于下半部分(else部分)。但是,如果仔细查看rowhelp1变量之间的关系以及空白和星号的校正值,您会发现它们遵循一种模式。它们之间存在线性关系。您可以看到,您总是需要减去或添加rowhelp1较小值,以获得给定行所需的空白或星号数。因此,让我们为较小的值引入一个新的帮助,也称为最小值,或简称为min

row  help1  min  blanks  *s
0    6      0    N-1     N+0
1    5      1    N-2     N+2
2    4      2    N-3     N+4
3    3      3    N-4     N+6
4    2      2    N-3     N+4
5    1      1    N-2     N+2
6    0      0    N-1     N+0

现在让我们使用min辅助变量来更新表格的最后两列。

row  help1  min  blanks     *s
0    6      0    N-(min+1)  N+2*min
1    5      1    N-(min+1)  N+2*min
2    4      2    N-(min+1)  N+2*min
3    3      3    N-(min+1)  N+2*min
4    2      2    N-(min+1)  N+2*min
5    1      1    N-(min+1)  N+2*min
6    0      0    N-(min+1)  N+2*min

表格完全概括。

赋值的提示是使用嵌套结构(嵌套循环)。一般的想法是使用外部循环迭代从0N-1的行和内部循环(或两个)来打印当前行所需的空白和星号数量。 / p>

现在由您决定循环条件和步骤/增量以及辅助变量help1min的计算。