标题:java 的编程
只看楼主
王雪亮
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:75
专家分:158
注 册:2011-5-4
结帖率:66.67%
 问题点数:0 回复次数:17 
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
搜索更多相关主题的帖子: 顺时针 java 
2011-05-14 10:06
buffer
Rank: 5Rank: 5
等 级:职业侠客
帖 子:73
专家分:326
注 册:2010-12-31
得分:0 
程序代码:
import java.util.Scanner;
public class SpiralMatrix {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int width = 1 + (int) Math.log10(n * n);
        int matrix[][] = new int[n][n];
        int count = 1;
        for (int i = n - 1, j = 0; i > 0; --i, ++j) {
            for (int k = j; k < i; ++k)
                matrix[j][k] = count++;
            for (int k = j; k < i; ++k)
                matrix[k][i] = count++;
            for (int k = i; k > j; --k)
                matrix[i][k] = count++;
            for (int k = i; k > j; --k)
                matrix[k][j] = count++;
        }
        if ((n & 1) != 0)
            matrix[(n - 1) >> 1][(n - 1) >> 1] = count++;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                System.out.format("%" + width + "d ", matrix[i][j]);
            }
            System.out.println();
        }
    }
}
2011-05-14 13:52
王雪亮
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:75
专家分:158
注 册:2011-5-4
得分:0 
回复 2楼 buffer
有没有解释呀    给点注释行不
2011-05-14 15:23
行云流雨
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-4-9
得分:0 
回复 2楼 buffer
牛,真的不错,你的数学应该不错吧

命里有时终须有,命里无时莫强求!
2011-05-14 18:04
王雪亮
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:75
专家分:158
注 册:2011-5-4
得分:0 
回复 2楼 buffer
有没有注释呀  我有点看不懂
2011-06-06 22:47
superemewill
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-12-6
得分:0 
我开始也是这样想的,把用矩阵进行变化,最后发现不了其中规律
2011-06-07 11:49
szlxq27
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-5-10
得分:0 
matrix[(n - 1) >> 1][(n - 1) >> 1] = count++

这儿用的是移位吗?
2011-06-07 16:34
王雪亮
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:75
专家分:158
注 册:2011-5-4
得分:0 
回复 7楼 szlxq27
是的
2011-06-07 19:02
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
程序代码:
import java.util.Scanner;

public class Snake {
    public static void snake(int n, int rows, int cols, int count, int[][] s) {
        int x = 0, y = 0;
        if(n <= 1) {
            if(n == 1)
                s[rows][cols] = count++;
            return;
        }
        while(y < n - 1)
            s[rows + x][cols + y++] = count++;
        while(x < n - 1)
            s[rows + x++][cols + y] = count++;
        while(cols + y > cols)
            s[rows + x][cols + y--] = count++;
        while(rows + x > rows)
            s[rows + x--][cols + y] = count++;
        snake(n - 2, rows + 1, cols + 1, count, s);
    }
   
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        int n = reader.nextInt();
        int width = (int)Math.log10(n * n) + 2;
        int [][] s = new int[n][n];
        snake(n, 0, 0, 1, s);
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++)
                System.out.printf("%" + width + "d", s[i][j]);
            System.out.println();
        }
    }
}


[ 本帖最后由 lz1091914999 于 2011-6-14 08:20 编辑 ]

My life is brilliant
2011-06-08 09:33
王雪亮
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:75
专家分:158
注 册:2011-5-4
得分:0 
回复 9楼 lz1091914999
我一点也看不懂你所用的方法   能写的清楚点吗  
2011-06-08 15:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-339812-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.128365 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved