首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

随便形状的顺时针环绕的蛇形矩阵

2012-12-21 
任意形状的顺时针环绕的蛇形矩阵/*作者:郑云飞*创建日期:2010年6月16日下午17:51*内容:任意行和列的顺时针

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

/*作者:郑云飞*创建日期: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; }}

?随便形状的顺时针环绕的蛇形矩阵

热点排行