java程序问题?求解!! 下面是一个 5*5 的螺旋方阵(顺时针方向旋转)编程输出 10*10(n<10)阶的 螺旋方阵 下面是一个5*5阶的螺旋方阵,试编程打印出此形式的n*n(n...

作者&投稿:爰祝 (若有异议请与网页底部的电邮联系)
写了一个小时,居然没分啊!!!算了给你了
import java.util.Scanner;

public class Helix {

/**
* 螺旋输出
*/
public static void main(String[] args) {
int size=5;
Scanner sc=new Scanner(System.in);
System.out.println("输入数组大小:");
size=sc.nextInt();

int count=0;
int [][]array=new int[size][size];
int m=0,n=0;
int down,right,up=0,left=0;
down=size-1;
right=size-1;
int max=size*size;
while(true){
count++;
if(m==up){
array[m][n]=count;
n++;
if(n>right){
n=right;
m++;
}
}
else if(n==right){
array[m][n]=count;
m++;
if(m>down){
m=down;
right--;
}
}
else if(m==down){
array[m][right]=count;
right--;
if(right<left){
right=left;
down--;
}
}
else if(right==left){
array[down][left]=count;
down--;
if(down<=up){
down=up;
left++;
}
}
else{
up++;
down=n-1;
right=m-1;
m=up;
n=left;
count--;
}
/////////////////////////////////////////////
if(count>=max){
break;
}
}// end loop
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.print(array[i][j]+"\t");
}
System.out.println();
}
}
}

第一个太复杂没时间给你考虑
后面一个很简单
规律是这样的
1到n
2到2n
3到3n



n到n*n
两个for循环就出来了

下面是一个5*5阶的螺旋方阵,试编程打印出此形式的n*n(n<10)阶的方阵(顺时针旋进)。~

#include

#define SIZE 9
void main()
{
long pData[SIZE][SIZE];
long n=0;
printf("请输入大小( n<10 ):
");
scanf("%d", &n);
if (n>=10)
n=9;

long i=0, j=0, k=0;
for (j=0; j<SIZE; j++)
for (i=0; i<SIZE; i++)
pData[j][i] = 0;

i=0; j=0;
long nDirection = 0; // 0,1,2,3 右 下 左 上
for (k=1; k<=n*n; k++)
{
pData[j][i] = k;
switch(nDirection)
{
case 0:
if (i>=n-1 || pData[j][i+1]!=0)
{
nDirection++;
j++;
}else
{
i++;
}
break;
case 1:
if (j>=n-1 || pData[j+1][i]!=0)
{
nDirection++;
i--;
}else
{
j++;
}
break;
case 2:
if (i<=0 || pData[j][i-1]!=0)
{
nDirection++;
j--;
}else
{
i--;
}
break;
case 3:
if (j<=0 || pData[j-1][i]!=0)
{
nDirection=0;
i++;
}else
{
j--;
}
break;
}
}

for (j=0; j<n; j++)
{
for (i=0; i<n; i++)
{
printf("%5d", pData[j][i]);
}
printf("
");
}
getchar();
}

/*
请输入大小( n<10 ):
9
1 2 3 4 5 6 7 8 9
32 33 34 35 36 37 38 39 10
31 56 57 58 59 60 61 40 11
30 55 72 73 74 75 62 41 12
29 54 71 80 81 76 63 42 13
28 53 70 79 78 77 64 43 14
27 52 69 68 67 66 65 44 15
26 51 50 49 48 47 46 45 16
25 24 23 22 21 20 19 18 17
Press any key to continue
*/

Dim n As Integer, a() As Integer, c As Integer, m As Integer, d As Integer
Private Sub Command1_Click()
ReDim a(n ^ 2)
m = n
For j = 1 To n ^ 2
a(j) = j
Next
If n Mod 2 = 0 Then
d = n / 2
Else
d = n \ 2 + 1
End If
For j = 1 To d
For u = 1 To n
If b + 1 > m ^ 2 Then Exit For
b = b + 1
CurrentX = (u + j - 1) * 5: CurrentY = j * 5
Print a(b)
Next
c = (u + j - 1)
For u = 1 To n - 1
If b + 1 > m ^ 2 Then Exit For
b = b + 1
CurrentX = (c - 1) * 5: CurrentY = (u + j) * 5
Print a(b)
Next
c = u + j - 1
For u = 1 To n - 1
If b + 1 > m ^ 2 Then Exit For
b = b + 1
CurrentX = (n + j - 1) * 5 - (u) * 5: CurrentY = (c) * 5
Print a(b)
Next
c = n + 1 - u
For u = 1 To n - 2
If b + 1 > m ^ 2 Then Exit For
b = b + 1
CurrentX = (c + j - 1) * 5: CurrentY = (n + j - 1) * 5 - (u) * 5
Print a(b)
Next
n = n - 2
Next
End Sub
Private Sub Form_Load()
Scale (0, 0)-(100, 100)
n = InputBox("请输入方阵的阶数n:")
End Sub

自己变得 很好用 不管多少阶 阶数太多 的话 把行距拉大就行了 就是程序里的 *5 把5 改大点 就好了 !!!!