java中的螺旋数模式
我需要根据用户输入的数字在java中创建这些模式: 如用户输入3:java中的螺旋数模式,java,Java,我需要根据用户输入的数字在java中创建这些模式: 如用户输入3: 1 2 3 ------------> 8 9 4 |-------> | 7 6 5 <-----------| 如果用户输入5: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 依此类推。您可以朝一个方向看: 首先创建一个空的二维数组来存储结果
1 2 3 ------------>
8 9 4 |-------> |
7 6 5 <-----------|
如果用户输入5:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
依此类推。您可以朝一个方向看: 首先创建一个空的二维数组来存储结果 我可以观察到的模式是,例如,填充一张尺寸为5的表格,从左上角开始,向右填充5个数字,然后顺时针改变方向,填充4个数字,然后顺时针改变方向,填充4个数字,改变方向,填充3,改变方向填充3 “要填充的位数”的模式为n,n-1,n-1,n-2,n-2。。。。。1,1 (我相信还有其他模式更容易实现,但我不认为这很难实现)
另一种方法类似于我上面所做的:保留一个变量来表示方向,从左上角开始,继续填充数字,直到到达1)边界或2)已经填充了数字的数组条目。然后顺时针转动你的方向。重复上述步骤,直到将所有数字填满。我终于找到了解决方案。像这样
//you can change Input No Here.
int INPUT = 5;
//statics for direction type
final int LEFT = 1;
final int DOWN = 2;
final int RIGHT = 3;
final int UP = 4;
//Grid Array
int[][] patt = new int[INPUT][INPUT];
//initial position
int x = 0;
int y = 0;
//initial direction
int Direction = LEFT;
//Master Loop
for (int i = 0; i < INPUT * INPUT; i++) {
int temp = i + 1;
//Checking boundaries
if (y > INPUT - 1) {
Direction = DOWN;
x++;
y--;
i--;
continue;
} else if (x > INPUT - 1) {
Direction = RIGHT;
x--;
y--;
i--;
continue;
} else if (y < 0) {
Direction = UP;
y++;
x--;
i--;
continue;
}else if (x < 0) {
Direction = LEFT;
y++;
x++;
i--;
continue;
}
if (patt[x][y] == 0) {
patt[x][y] = temp;
} else {
if (Direction == LEFT) {
Direction = DOWN;
y--;
} else if (Direction == DOWN) {
Direction = RIGHT;
x--;
} else if (Direction == RIGHT) {
Direction = UP;
y++;
} else {
Direction = LEFT;
x++;
}
i--;
}
switch (Direction) {
case LEFT:
y++;
break;
case DOWN:
x++;
break;
case RIGHT:
y--;
break;
case UP:
x--;
break;
}
}// Master Loop Ends
// Print Grid Array
for (int i = 0; i < INPUT; i++) {
for (int k = 0; k < INPUT; k++)
if (patt[i][k] <= 9)
System.out.print(" "+patt[i][k] + " ");
else
System.out.print(patt[i][k] + " ");
System.out.println();
}
//您可以在此处更改输入No。
int输入=5;
//方向类型的静力学
最终整数左=1;
最终整数向下=2;
最终整数右=3;
最终积分上限=4;
//网格阵列
int[][]patt=新int[INPUT][INPUT];
//初始位置
int x=0;
int y=0;
//初始方向
int方向=左;
//主回路
对于(int i=0;i输入-1){
方向=向下;
x++;
y--;
我--;
继续;
}否则如果(x>输入-1){
方向=右;
x--;
y--;
我--;
继续;
}else if(y<0){
方向=向上;
y++;
x--;
我--;
继续;
}else如果(x<0){
方向=左;
y++;
x++;
我--;
继续;
}
if(patt[x][y]==0){
patt[x][y]=温度;
}否则{
如果(方向==左){
方向=向下;
y--;
}否则如果(方向==向下){
方向=右;
x--;
}else if(方向==右侧){
方向=向上;
y++;
}否则{
方向=左;
x++;
}
我--;
}
开关(方向){
案例左:
y++;
打破
按大小写:
x++;
打破
案例权利:
y--;
打破
个案:
x--;
打破
}
}//主回路末端
//打印网格阵列
对于(int i=0;i如果(patt[i][k]这是一个数组/刚刚打印的有趣问题,但请分享您尝试的代码。我可以使用嵌套for循环打印这么多简单的模式,但这很关键,所以我不知道如何开始,甚至不知道尝试什么。我在这里发布了这个问题,因为我可以从其他人那里得到更多提示。
//you can change Input No Here.
int INPUT = 5;
//statics for direction type
final int LEFT = 1;
final int DOWN = 2;
final int RIGHT = 3;
final int UP = 4;
//Grid Array
int[][] patt = new int[INPUT][INPUT];
//initial position
int x = 0;
int y = 0;
//initial direction
int Direction = LEFT;
//Master Loop
for (int i = 0; i < INPUT * INPUT; i++) {
int temp = i + 1;
//Checking boundaries
if (y > INPUT - 1) {
Direction = DOWN;
x++;
y--;
i--;
continue;
} else if (x > INPUT - 1) {
Direction = RIGHT;
x--;
y--;
i--;
continue;
} else if (y < 0) {
Direction = UP;
y++;
x--;
i--;
continue;
}else if (x < 0) {
Direction = LEFT;
y++;
x++;
i--;
continue;
}
if (patt[x][y] == 0) {
patt[x][y] = temp;
} else {
if (Direction == LEFT) {
Direction = DOWN;
y--;
} else if (Direction == DOWN) {
Direction = RIGHT;
x--;
} else if (Direction == RIGHT) {
Direction = UP;
y++;
} else {
Direction = LEFT;
x++;
}
i--;
}
switch (Direction) {
case LEFT:
y++;
break;
case DOWN:
x++;
break;
case RIGHT:
y--;
break;
case UP:
x--;
break;
}
}// Master Loop Ends
// Print Grid Array
for (int i = 0; i < INPUT; i++) {
for (int k = 0; k < INPUT; k++)
if (patt[i][k] <= 9)
System.out.print(" "+patt[i][k] + " ");
else
System.out.print(patt[i][k] + " ");
System.out.println();
}