当前位置:编程学习 > JAVA >>

用java输出N的图如9,16,25,36,49,下面是64的图

01--02--03--04--05--06--07--08
                             |
28--29--30--31--32--33--34  09
 |                       |   |
27  48--49--50--51--52  35  10
 |   |               |   |   |
26  47  60--61--62  53  36  11
 |   |   |       |   |   |   |
25  46  59  64--63  54  37  12
 |   |   |           |   |   |
24  45  58--57--56--55  38  13
 |   |                   |   |
23  44--43--42--41--40--39  14
 |                           |
22--21--20--19--18--17--16--15
--------------------编程问答-------------------- 绕圈圈啊。。真高难度。。。求代码。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 20分。实在不想动手。。 --------------------编程问答--------------------
package csdn;

public class N2N {

// 新建二维数组,保存矩阵的值
int[][] array = null;

public static void main(String[] args) {
new N2N().init(4);
}

public void init(int n) {
array = new int[n][n];

result(n, n - 1, n, 0, (n - 1) * 4);

// 输出矩阵的值
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(array[i][j] + "\t");
}
System.out.println();
}
}

/**
 * 求n*n矩阵的值
 * 
 * @param n
 *            矩阵数,递减,每次-2,到0或者1为止
 * @param index
 *            当前矩阵的最大索引
 * @param m
 *            矩阵的开始数
 * @param time
 *            第几个矩阵,从0开始
 * @param max
 *            当前矩阵的最大值
 */
public void result(int n, int index, int m, int time, int max) {
// 表示矩阵每一边2个顶点之间的间隔点数,矩阵公4个边,4个顶点
int count = n - 1;

// 个数(总共有多少个点数)
int num = count * 4;

// 本矩阵的开始值(矩阵的第一个顶点的值)
int one = max - num + 1;
// 本矩阵的开始值(矩阵的第一个顶点的值)
int two = one + count;

// 本矩阵的结束值(矩阵的第四个,最后一个顶点的值)
int four = one + count * 3;// 或者four=max-count-1

// 本矩阵Y轴的开始索引
int y1 = index + 1 - n;
// 本矩阵Y轴的最大索引
int y2 = index;
// 本矩阵X轴的开始索引
int x1 = index + 1 - n;
// 本矩阵X轴的最大索引
int x2 = index;

// +time或者-time主要是使顶点处的值加索引为0,4个顶点只能加0,因为每次递归下一个矩阵,第一个顶点的索引就会从0开始依次加1

for (int i = y1; i <= y2; i++) {
for (int j = x1; j <= x2; j++) {
// 给矩阵X轴的最上边赋值,从第1个顶点开始依次加1,到第2个顶点为止
if (i == y1) {
array[i][j] = one + (j - time);
}
// 给矩阵Y轴的最右边赋值,从第2个顶点开始依次加1,到第3个顶点为止
if (j == x2) {
array[i][j] = two + (i - time);
}
// 给矩阵X轴的最下边赋值,从第4个顶点开始依次减1,到第3个顶点为止
if (i == y2) {
array[i][j] = four - j + time;
}
// 给矩阵Y轴的最左边赋值,从最大值处(第1个顶点的下方)开始依次减1,到第4个顶点为止
if (j == x1) {
// 排除第一个顶点,因为第1个顶点与最大值之间相隔>1
if (i != y1) {
array[i][j] = max - i + time + 1;
}
}
}
}

// 下一个矩阵数
n = n - 2;
// 下一个矩阵的最大索引
index = index - 1;
// 下一矩阵的个数,点数
num = (n - 1) * 4;
// 下一个矩阵的最大值
max = max + num;
// 递归下一个矩阵,每一个矩阵之间隔2,偶数到0,奇数到1(最后一个最大)
if (n != 0 && n != 1 && n > 0) {
result(n, index, m, time + 1, max);
}
// 给奇数最后一个赋值
if (n == 1) {
array[m / 2][m / 2] = m * m;
}
}
}
--------------------编程问答-------------------- 这图是不是有点不规范啊,看的很别扭啊
--------------------编程问答-------------------- 没看懂 楼主的意思 --------------------编程问答--------------------

    public static void test(int n){
     int r=0,c=0;
int d=0;
int[] z=new int[]{0,n-1,n-1,0};//上,右,下,左
String[][] ss=new String[n][n];
String s;
for(int i=1,p=n*n;i<=p;i++){
s=i+" ";
if(i<10){
s="0"+s;
}
ss[r][c]=s;
switch(d){
case 0://右+列
if(++c==z[1]){
z[0]++;
d=1;
}
break;
case 1://下+行
if(++r==z[2]){
z[1]--;
d=2;
}
break;
case 2://左-列
if(--c==z[3]){
z[2]--;
d=3;
}
break;
case 3://上-行
if(--r==z[0]){
z[3]++;
d=0;
}
break;
}
}
for(r=0;r<n;r++){
for(c=0;c<n;c++){
System.out.print(ss[r][c]);
}
System.out.println();
}
    }
public static void main(String[] args) throws Exception{
test(8);
}
--------------------编程问答-------------------- 才20分,牛人果然很多 --------------------编程问答-------------------- --------------------编程问答--------------------
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,