java螺旋数组

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++;

		}

	}

	}


}

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值