任意形状的顺时针环绕的蛇形矩阵

本文介绍了一个用于生成顺时针蛇形矩阵的Java算法,包括输入矩阵的行数和列数,以及输出矩阵的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*作者:郑云飞
*创建日期:2010年6月16日下午17:51
*内容:任意行和列的顺时针蛇形矩阵 
*/
import java.io.*;
public class snake3
{
 public static void main(String[] args) throws IOException
 {
  BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  System.out.println("请输入蛇形矩阵的行数:");
  String str=br.readLine();
  System.out.println("请输入蛇形矩阵的列数:");
  String str1=br.readLine();
  int m=Integer.parseInt(str);//输入的行数
  int n=Integer.parseInt(str1);//输入的列数
  int k=1;//声明一个累加器
  int [][]a=new int [m][n];//声明一个二维数组
  for(int i=0;i<min(m,n)/2;i++)//控制蛇形矩阵的环绕的圈数
  {
   for(int j=i;j<n-i;j++)//遍历最上面一行
    a[i][j]=k++;//为最上面一行赋值
   for(int j=i+1;j<m-i;j++)//遍历最右边一行
    a[j][n-i-1]=k++;//为最右边一行赋值
   for(int j=n-i-2;j>=i;j--)//遍历最下边一行
    a[m-i-1][j]=k++;//为最下边一行赋值
   for(int j=m-i-2;j>i;j--)//遍历最左边一样
    a[j][i]=k++;//为最左边一行赋值
  }
     if(min(m,n)%2==1)//如果输入的值有基数
   a[min(m,n)/2][min(m,n)/2]=k++;//为最后一圈开始的一个数赋值
     /*此时如果不写下面的代码,通过运行结果可以得知,最后面还有Math.abs(m-n)个连续的数还没有赋值
      * */
     if(m==min(m,n))//如果行数小于列数 为最后一圈那一行的Math.abs(m-n)个连续的数赋值
     {
      for(int i=0;i<Math.abs(m-n);i++)//控制赋值的个数
      {
       a[min(m,n)/2][min(m,n)/2+i+1]=k++;//为没可有赋值的数赋值
      }
     }
     if(n==min(m,n))//如果列数小于行数,那么就为最后一圈那一列的Math.abs(m-n)个连续的数赋值
     {
      for(int i=0;i<Math.abs(m-n);i++)//控制赋值的个数
      {
       a[min(m,n)/2+i+1][min(m,n)/2]=k++;//为没有赋值的数赋值
      }
     }
  for(int i=0;i<m;i++)//输出结果
  {
   for(int j=0;j<n;j++)
   {
    System.out.print(a[i][j]+"\t");
   }
   System.out.println();
  }

 }
 public static int min(int a,int b)//定义一个求最小值的方法
 {
  return a<b?a:b;
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值