7、程序设计 从键盘输入一个整数(1~20) 则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针

7、程序设计
从键盘输入一个整数(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(16分)
请写上注释

第1个回答  2011-05-14
#include<stdio.h>
int
main()
{
int n,i,j,t,k=1;
int str[20][20]={0};
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
str[i][j]=-1;
i=1;j=1;
for(t=1;t<=n*n;t++){
if(k==1){
if(str[i][j]==-1)
str[i][j++]=t;
else {k=2;i++;j--;}
}
if(k==2){
if(str[i][j]==-1)
str[i++][j]=t;
else {k=3;i--;j--;}
}
if(k==3){
if(str[i][j]==-1)
str[i][j--]=t;
else {k=4;i--;j++;}
}
if(k==4){
if(str[i][j]==-1)
str[i--][j]=t;
else { k=1;i++;j++;t--;}
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
printf("%-4d",str[i][j]);
printf("\n");
}
return 0;
}
//不是很难 自己体会下就会了追问

请注释一下,谢谢

追答

可能这个方法不是很好理解 注释不知从何注起,我也不是很好写
这样吧 我以前写了个类似的代码 好理解些 你去看下
http://zhidao.baidu.com/question/253696530.html

本回答被网友采纳
第2个回答  2012-03-17
我也来秀秀自己的代码
import java.util.*;
public class Test8_1 {
int number=1;
int a[][]=new int[20][20];
public void doit(int m,int i1,int i2)
{
if(m<0) return;
if(m==1)
a[i1][i2]=number;
else
{
for(int i=0;i<m;i++)//top
a[i1][i2+i]=number++;
for(int i=0;i<m-1;i++)//right
a[i+i1+1][m+i2-1]=number++;
for(int i=0;i<m-1;i++)//bottom
a[m+i1-1][m+i2-2-i]=number++;
for(int i=0;i<m-2;i++)//left
a[m+i1-i-2][i2]=number++;
}
doit(m-2,i1+1,i2+1);
}
public void print(int m)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args){
System.out.println("输入数字(1-20):");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
Test8_1 t=new Test8_1();
t.doit(num,0,0);
t.print(num);
}
}