1. (程序设计题)
对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。例如,一个 4 行 5 列的螺旋矩阵如下:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
要求编程实现:输入两个整数M和N,输出一个M*N的螺旋矩阵。
import java.util.Scanner;
class temp
{
public static void main(String[] args)
{
int i=0,j=0;
System.out.print("请输入M和N : ");
Scanner sc=new Scanner(System.in);
int M=sc.nextInt();
//sc.close();
Scanner sd=new Scanner(System.in);
int N=sd.nextInt();
//sd.close();
int[][] a=new int[100][100];
for(int k=1;k<=N*M;k++){
a[i][j]=k;
if((j<N-1)&&(a[i][j+1]==0)){
j++;
}
else if((i<M-1)&&(a[i+1][j]==0)){
i++;
}
else if((j>0)&&(a[i][j-1]==0)){
j--;
}
else {
while(a[i-1][j]==0){
i--;
k++;
a[i][j]=k;
//System.out.println("i:"+i+"\t"+"j:"+j+"\t"+"k:"+k+"\t"+"a[i][j]:"+a[i][j]+"\t");
}
j++;
}
}
for(int p=0;p<M;p++){
for(int q=0;q<N;q++)
System.out.print(a[p][q]+"\t");
System.out.println();
}
}
}
2. (程序设计题)
import java.util.Scanner;
class temp
{
public static void main(String[] args)
{
int[][] a=new int[100][100];
boolean[][] flag=new boolean[100][100];
int i=0,j=0;
System.out.print("请输入M和N : ");
Scanner sc=new Scanner(System.in);
int M=sc.nextInt();
Scanner sd=new Scanner(System.in);
int N=sd.nextInt();
int val=1;
for(int p=0;p<M;p++){
for(int q=0;q<N;q++)
flag[p][q]=true;
}
for(int p=0;p<M;p++){
for(int q=0;q<N;q++)
a[p][q]=val++;
}
System.out.println("原来的矩阵为:");
for(int p=0;p<M;p++){
for(int q=0;q<N;q++)
System.out.print(a[p][q]+"\t");
System.out.println();
}
System.out.println();
System.out.println("按顺时针螺旋顺序返回矩阵中的元素为:");
for(int k=1;k<=N*M;k++){
flag[i][j]=false;
System.out.print(a[i][j]+" ");
if((j<N-1)&&(flag[i][j+1])){
j++;
}
else if((i<M-1)&&(flag[i+1][j])){
i++;
}
else if((j>0)&&(flag[i][j-1])){
j--;
}
else {
while(flag[i-1][j]){
i--;
k++;
System.out.print(a[i][j]+" ");
flag[i][j]=false;
//System.out.println("i:"+i+"\t"+"j:"+j+"\t"+"k:"+k+"\t"+"a[i][j]:"+a[i][j]+"\t");
}
j++;
}
}
}
}