用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;
}
}
}
--------------------编程问答-------------------- 没看懂 楼主的意思 --------------------编程问答--------------------
--------------------编程问答-------------------- 才20分,牛人果然很多 --------------------编程问答-------------------- --------------------编程问答--------------------
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);
}
补充:Java , Java EE