(蓝桥杯)java模拟题第八题---------顺时针螺旋打印数字
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:
输入数字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
我的思路:
1.先思考,找规律。
2.输出的结果是矩阵图,并且顺时针输出有规律数字,
就把矩阵分为由多个圈组成,并且每一个圈分为上,右,下,左边。
3.每一个圈的输出就是一次循环,第一次循环得到一个最大的圈,
之后循环条件到的圈内嵌在大圈里。
4.给它循环一定的次数,最终就得到所
要的矩阵。
5.分为四边,就是更好的把数字控制,并且把数字放入到矩阵中
附上我的代码。如有改进地方,望能提出,多谢。
Java代码- 1./**
- 2. * @category 顺时针螺旋打印数字
- 3. * @author liucanwen
- 4. * @2012年1月22日21:26:18
- 5. */
- 6.public class T8
- 7.{
- 8. public static void main(String[] args)
- 9. {
- 10. System.out.print("请输入一个整数(1~20): ");
- 11. Scanner scanner = new Scanner(System.in);
- 12. int inputNum = scanner.nextInt();
- 13.
- 14. int[][] arr = T8.getData(inputNum);
- 15.
- 16. for(int i = 0; i < inputNum; i++)
- 17. {
- 18. for(int j = 0; j < inputNum; j++)
- 19. {
- 20. //打印数字前加空格,使整体对齐
- 21. if(10 > arr[i][j])
- 22. System.out.print(" " + arr[i][j] + " ");
- 23. else if(100 > arr[i][j])
- 24. System.out.print(" " + arr[i][j] + " ");
- 25. else
- 26. System.out.print(arr[i][j] + " ");
- 27.
- 28. //进行换行
- 29. if(inputNum - 1 == j)
- 30. System.out.println();
- 31. }
- 32. }
- 33. }
- 34. public static int[][] getData(int number)
- 35. {
- 36. //创建一个20*20的二维数组,用于放置数据,并返回
- 37. int[][] arrs = new int[20][20];
- 38.
- 39. //数组中每一位用num表示,先初始化为1
- 40. int num = 1;
- 41.
- 42. int i = 0;//表示数组中第一个数值
- 43. int j = 0;//表示数组中第二个数值
- 44.
- 45. //每次循环四边组成一个圈,多次循环之后内嵌圈
- 46. for(int k = 0; k <= number/2; k++)
- 47. {
- 48. //赋值上边(控制好结束条件)
- 49. for(j = k, i = k; j < number - k; j++)
- 50. {
- 51. arrs[i][j] = num;
- 52. num++;
- 53. }
- 54. //赋值右边 (控制好结束条件)
- 55. for(j=j-1, i=i+1; i < number - k; i++)
- 56. {
- 57. arrs[i][j] = num;
- 58. num++;
- 59. }
- 60. //赋值下边(控制好结束条件)
- 61. for(j=j-1, i=i-1; j > k - 1; j--)
- 62. {
- 63. arrs[i][j] = num;
- 64. num++;
- 65. }
- 66. //赋值左边(控制好结束条件)
- 67. for(j=j+1, i=i-1; i > k; i--)
- 68. {
- 69. arrs[i][j] = num;
- 70. num++;
- 71. }
- 72. }
- 73. return arrs;
- 74. }
- 75.}
复制代码 |