我刚刚在15分钟前就想到了这个问题,尽管看起来非常容易,但是我遇到了一个严重的问题。
基本上我想做的是基于用户给出的数字(n),我想画一个方形。
示例:假设用户给出数字2,结果应为:
12
43
现在,假设用户给出数字3,结果应为:
123
894
765
等。
请不要给我这个问题的解决方案,我只是想要一两条线索让我离开。
我想过用一个简单的java类来做这件事,但我仍然在努力克服第一个条件:
public class DrawSquareWithNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter your number: ");
int number = scanner.nextInt();
for (int i = 0; i <= number; i++) {
if (i<number)
System.out.print(i);
if (i>=number) {
System.out.println("\n"+i);
}
}
}
}
任何提示?提前谢谢。
答案 0 :(得分:1)
我想你想用用户输入的号码制作nxn矩阵。所以你可以检查输入然后你可以使用循环(i = 1; i <= n; i ++)用于行,类似地用于列(对于j = 0; j <= n; j ++)然后你可以打印你想要的形状。因为你只是要求你提出想法,所以我不在这里发布任何代码。如果您遇到困难,可以参考:https://www.google.com/amp/s/www.geeksforgeeks.org/print-a-given-matrix-in-spiral-form/amp/
答案 1 :(得分:1)
好的,让我们试一试。首先让我们假设您必须在打印矩阵之前存储矩阵,并且没有神奇的公式允许您在一次迭代中打印所需的内容。
现在,您已经使用了NxN矩阵,例如3,它是3x3,9个位置。您可以使用方向向量来获得更清晰的解决方案,而不是以丑陋的方式使用一系列ifs来解决它。现在假设您还有另一个填充了布尔值的NxN矩阵,所有矩阵都设置为false,这将表示您将在最后打印的NxN矩阵中已经打印的位置。在最终的NxN矩阵中写入数字时,在布尔矩阵中将相同位置的布尔值设置为true。
因此,例如,您要打印第一行的位置,1 2 3.您将移动到右侧进行打印。这是方向(1,0),也就是起始方向向量。使用此坐标前进NxN矩阵。当你走出矩阵(在这个例子中,你的x位置是3)时,你将x位置减1,然后旋转&#34;你的方向向量(这应该在一个单独的函数中完成)。 (1,0)会旋转到(0,-1)。你继续使用这个向量来迭代你的矩阵,按需要旋转。在第一个整圆后,您将在走出矩阵之前到达已打印的位置。因此,在每次打印之后,您不仅要检查是否超出矩阵,还要检查该位置是否已有数字。为此,您使用布尔矩阵。
这就是我解决它的方式,可能有很多其他方式(以及更好的方法)。对于初学者,你可以在最终矩阵中使用null或mark,并为自己保留一个布尔值。
答案 2 :(得分:1)
所以我觉得我只是花了太多时间,但这是一个有趣的挑战,所以我想让我们试一试。
我为这个解决方案实现了一个代码版本并且它工作得很好,尽管它可能不是最干净的,因为我向后解决了整个问题。
这是我在网上尝试的解决方案(注意它是严格未经优化的,并且没有任何好的Java代码。说实话,这是一个快速而肮脏的实现):
所以这个想法非常简单:我们首先计算矩阵中每个位置的正确值,然后打印出矩阵。
让我们更详细地介绍一下:
我们首先为要打印的值创建矩阵:
对于给定的尺寸n
,这是
int[][] values = new int[n][n];
现在我们想要计算每个点的正确值。我选择以“错误的方式”解决它,不是从第一点开始,而是从螺旋的中心开始。
基本上想象这个矩阵有n = 3
:
[1][2][3]
[8][9][4]
[7][6][5]
而不是1
我只是从9
开始。对此的推理是,实际上更容易计算从螺旋上升到某一点的位置。
所以从这个中心点开始,我们以循环的方式从那里开始。对于矩阵
[1][2]
[4][3]
这意味着我们访问了4 - &gt; 3 - &gt; 2 - &gt; 1.然后只需在矩阵中保存正确的值。
我的方法唯一的问题是,对于尺寸不均匀的矩阵(3,5,7等),我仍然以螺旋顺序访问这些点,对于3x3,访问的顺序是例如9 - &gt; 4 - &gt; 3 - &gt; 2 - &gt; 1 - &gt; 8 - &gt; 7 - &gt; 6 - &gt; 5,在这张完美画面中可视化我完全画了画:
这导致结果矩阵反转:
[5][6][7]
[4][9][8]
[3][2][1]
这个小问题很容易修复,只需再次打印出矩阵,n%2 != 0
即可。
希望我可以帮助解决这个问题。
答案 3 :(得分:0)