如何以螺旋方式从左下角开始打印字母表?

huangapple go评论133阅读模式
英文:

How would I print the Alphabet In a spiral starting from the bottom left corner?

问题

如果我想在矩阵中打印类似这样的内容:

G F E
H I D
A B C

我应该如何做?

我目前的代码如下:

A B C
H I D
G F E

我希望螺旋从矩阵的左下角开始,向左旋转。

以下是我目前用于处理数字的代码:

 int n = sc.nextInt();
        int[][] spiral = new int[n][n];
        int value = 1;
        int minCol = 0;  
        int maxCol = n-1;      
        int minRow = 0;  
        int maxRow = n-1;
        while (value <= n*n)
        {
            for (int i = minCol; i <= maxCol; i++)
            {
                spiral[minRow][i] = value;
                value++;
            }
             
            for (int i = minRow+1; i <= maxRow; i++) 
            { 
                spiral[i][maxCol] = value; 
                value++; 
            } 
            for (int i = maxCol-1; i >= minCol; i--)
            {
                spiral[maxRow][i] = value;        
                value++;
            }
             
            for (int i = maxRow-1; i >= minRow+1; i--) 
            {
                spiral[i][minCol] = value;
                value++;
            }
            minCol++;      
            minRow++;
            maxCol--;
            maxRow--;
        }
        for (int i = 0; i < spiral.length; i++)
        {
            for (int j = 0; j < spiral.length; j++)
            {
                System.out.print(spiral[i][j]+ "\t");
            }
             
            System.out.println();
        }
英文:

If I wanted to print something like this in a matrix:

G F E
H I D
A B C

How would I do this?

The code I currently have goes like this:

A B C
H I D
G F E

I would like the spiral to start on the bottom left-hand corner of the matrix, and rotate to the left.

Here is my current code to do that with numbers:

 int n = sc.nextInt();
int[][] spiral = new int[n][n];
int value = 1;
int minCol = 0;  
int maxCol = n-1;      
int minRow = 0;  
int maxRow = n-1;
while (value &lt;= n*n)
{
for (int i = minCol; i &lt;= maxCol; i++)
{
spiral[minRow][i] = value;
value++;
}
for (int i = minRow+1; i &lt;= maxRow; i++) 
{ 
spiral[i][maxCol] = value; 
value++; 
} 
for (int i = maxCol-1; i &gt;= minCol; i--)
{
spiral[maxRow][i] = value;        
value++;
}
for (int i = maxRow-1; i &gt;= minRow+1; i--) 
{
spiral[i][minCol] = value;
value++;
}
minCol++;      
minRow++;
maxCol--;
maxRow--;
}
for (int i = 0; i &lt; spiral.length; i++)
{
for (int j = 0; j &lt; spiral.length; j++)
{
System.out.print(spiral[i][j]+ &quot;\t&quot;);
}
System.out.println();
}

答案1

得分: 1

更改为

       for (int i = spiral.length - 1; i >= 0; i--)
        {
            for (int j = 0; j < spiral.length; j++)
            {
                System.out.print(spiral[i][j]+ "\t");
            }
             
            System.out.println();
        }

注意第一个 for 循环。它以相反的顺序打印行。

英文:

Change

       for (int i = 0; i &lt; spiral.length; i++)
{
for (int j = 0; j &lt; spiral.length; j++)
{
System.out.print(spiral[i][j]+ &quot;\t&quot;);
}
System.out.println();
}

to

       for (int i = spiral.length - 1; i &gt;= 0; i--)
{
for (int j = 0; j &lt; spiral.length; j++)
{
System.out.print(spiral[i][j]+ &quot;\t&quot;);
}
System.out.println();
}

Note the first for loop. It prints the lines in reverse order

huangapple
  • 本文由 发表于 2020年9月11日 06:27:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/63838451.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定