日期:2014-05-20  浏览次数:20683 次

【新手求助】一道简单的题!(pascal)明天就要!
输入n,打印出下图:(N=5)

1   16   15   14   13

2   17   24   23   12

3   18   25   22   11  

4   19   20   21   10

5     6     7     8     9
明天就要,快点!

------解决方案--------------------
class HelixMatrix {
int[][] myMatrix = new int[20][20];
static int H = 5;
static int L = 4;
static int count = 0; //填充数字记数
int hh=H; //矩阵实际大小
int ll=L;
int stepX = hh; //初始步距
int stepY = 6-1;
int x=0; //初始坐标
int y=0;

void fillFromLeftToRight(int step) {
for (int i=0; i <step; i++) {
if (myMatrix[y][x]==0) { myMatrix[y][x] = ++count; }
else { x++; myMatrix[y][x] = ++count; }
}
};
void fillFromUpToDown(int step) {
for (int i=0; i <step; i++) {
y++;
myMatrix[y][x] = ++count;
}
};
void fillFromRightToLeft(int step) {
for (int i=0; i <step; i++) {
x--;
myMatrix[y][x] = ++count;
}
};
void fillFromDownToUp(int step) {
for (int i=0; i <step; i++) {
y--;
myMatrix[y][x] = ++count;
}
};
public void make() {
do {
if (count != H*L) fillFromLeftToRight(stepX--);
if (count != H*L) fillFromUpToDown(stepY--);
if (count != H*L) fillFromRightToLeft(stepX--);
if (count != H*L) fillFromDownToUp(stepY--);
} while (count!=H*L);
};
public void prtMatrix() {
for (int i=0; i <L; i++) {
for (int j=0; j <H; j++)
if (myMatrix[i][j] < 5) System.out.print( " "+myMatrix[i][j]);
else if (myMatrix[i][j] > = 100) System.out.print( " "+myMatrix[i][j]);
else System.out.print( " "+myMatrix[i][j]);
System.out.println();
}
};
}

public class juZhen {
public static void main(String[] args) {
HelixMatrix aa = new HelixMatrix();
aa.make();
aa.prtMatrix();
}

}