java模拟题第八题---------顺时针螺旋打印数字

本文提供了一种算法实现,通过输入一个整数,输出以该数字为大小的矩阵,矩阵内的数字按照顺时针螺旋排列。算法通过循环控制矩阵的填充过程,确保数字按照指定顺序填充至矩阵中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=medium]从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的[color=red]数字按照顺时针螺旋[/color]的形式填入其中。例如:
输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
[/size]
[color=blue][size=medium]我的思路:
1.先思考,找规律。
2.输出的结果是矩阵图,并且顺时针输出有规律数字,
就把矩阵分为由多个圈组成,并且每一个圈分为上,右,下,左边。
3.每一个圈的输出就是一次循环,第一次循环得到一个最大的圈,
之后循环条件到的圈内嵌在大圈里。
4.给它循环一定的次数,最终就得到所
要的矩阵。
5.分为四边,就是更好的把数字控制,并且把数字放入到矩阵中

附上我的代码。如有改进地方,望能提出,多谢。[/size][/color]

/**
* @category 顺时针螺旋打印数字
* @author liucanwen
* @2012年1月22日21:26:18
*/
public class T8
{
public static void main(String[] args)
{
System.out.print("请输入一个整数(1~20): ");
Scanner scanner = new Scanner(System.in);
int inputNum = scanner.nextInt();

int[][] arr = T8.getData(inputNum);

for(int i = 0; i < inputNum; i++)
{
for(int j = 0; j < inputNum; j++)
{
//打印数字前加空格,使整体对齐
if(10 > arr[i][j])
System.out.print(" " + arr[i][j] + " ");
else if(100 > arr[i][j])
System.out.print(" " + arr[i][j] + " ");
else
System.out.print(arr[i][j] + " ");

//进行换行
if(inputNum - 1 == j)
System.out.println();
}
}
}
public static int[][] getData(int number)
{
//创建一个20*20的二维数组,用于放置数据,并返回
int[][] arrs = new int[20][20];

//数组中每一位用num表示,先初始化为1
int num = 1;

int i = 0;//表示数组中第一个数值
int j = 0;//表示数组中第二个数值

//每次循环四边组成一个圈,多次循环之后内嵌圈
for(int k = 0; k <= number/2; k++)
{
//赋值上边(控制好结束条件)
for(j = k, i = k; j < number - k; j++)
{
arrs[i][j] = num;
num++;
}
//赋值右边 (控制好结束条件)
for(j=j-1, i=i+1; i < number - k; i++)
{
arrs[i][j] = num;
num++;
}
//赋值下边(控制好结束条件)
for(j=j-1, i=i-1; j > k - 1; j--)
{
arrs[i][j] = num;
num++;
}
//赋值左边(控制好结束条件)
for(j=j+1, i=i-1; i > k; i--)
{
arrs[i][j] = num;
num++;
}
}
return arrs;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值