3

对于家庭作业,我需要帮助来概括打印以下模式的代码。

   A
  B C  
 D E F 
G H I J

问题是对字母之间的空格进行编码。
这就是我想出的,但这只是模式的前 4 行。
(对不起,我的格式化技巧很差>.>)

int r = 65;
char m ;
int count=0;
for(int i = 4;i>0;i--)
{
    for( int j = i;j>0;j--)
        {System.out.print(" ");}
    for(int j = 4-i;j>=0;j--)
        {
             count++;
             m=(char)r;
             if(count == 3||count == 6||count == 8 || count == 11|| count == 13|| count ==15)
             {
                 System.out.print(" ");r--; 

             }
                 else
                     System.out.print(m);r++;
        }
    for(int j = 4-i;j>0;j--)
        {
            count++;m=(char)r;
            if(count == 3||count == 6||count == 8 || count == 11|| count == 13|| count ==15)
            {
                System.out.print(" ");r--;
            }
                    else
                        System.out.print(m);r++;
        }                                                                               
            System.out.println("");
} 

感谢 Gene 的解释,我做了一些编辑,这就是我想出的。

            int r = 65;
char m ;
for(int i = 4;i>0;i--)
    {
        for( int j = i;j>0;j--)
            {System.out.print(" ");}
        for(int j = 4-i;j>=0;j--)
    {
         m=(char)r;

            System.out.print(m+" ");
            r++;
    }
            System.out.println("");
    }
4

2 回答 2

1

编写循环就是使用数学(通常是简单的数学)根据循环索引来描述一次迭代。

让我们N成为行数,i=0,1,...N-1它们的索引也是如此。

首先,您的示例显示该行i具有N-i-1前导空格。让我们检查一下。对于 rowi=N-1我们得到零,对于i=0我们得到N-1. 在您的示例中,i=0情况是 3。这与绘图一致,所以我们看起来不错。

第二部分是每行有i+1字符。除了最后一个之外,所有的都有一个后续空格。最后一个有以下换行符。

最后,我们可以通过从 A 开始并在每次打印新字母时递增来获得正确的字母。

所以现在我们准备好编写代码了:

char ltr = 'A';
for (int i = 0; i < N; i++) {

  // Print the leading spaces.
  int nLeadingSpaces = N - i - 1;
  for (int j = 0; j < nLeadingSpaces; j++) 
    System.out.print(' ');

  // Print the letters for this row.  There are
  // i+1 of them. So print the first i with a following
  // space and the last one with a newline.
  for (int j = 0; j < i; j++) 
    System.out.print(ltr++ + " ");
  System.out.println(ltr++);
}

这是未经测试的,但应该可以工作。

于 2012-07-15T15:03:28.957 回答
-1

您需要两个(嵌套)循环。

行号的外层。

行中位置的内部。

您需要在当前字符的循环之外定义一个变量。

在内循环开始时,根据 max line - current line number * const 写入空格(自己弄清楚 const )。

在内循环中输出当前字符和一个空格。

在内循环结束时增加输出字符。

在外循环结束时,继续下一行。

于 2012-07-15T15:01:53.010 回答