我是靠谱客的博主 干净超短裙,最近开发中收集的这篇文章主要介绍Java第三次作业数字旋转方阵--分治算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

import java.util.Scanner;
public class Test3_6_zxj
{

public static void main(String[] args)
{
// TODO Auto-generated method stub

/输入一个自然数N(2<N<9),要求输出如下的魔方阵,即边长为NN,元素取值为1至NN,1在左上角,呈顺时针方向依次放置各元素。
N=3时:
1 2 3
8 9 4
7 6 5
【输入样例】
4
【输出样例】输出内容为:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
/
//分治算法————递归调用
System.out.print(“请输入n的值:”);
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int array[][];
array=new int [n][n];
Test3_6_zxj drm = new Test3_6_zxj();
drm.Digitalrotationmatrix(1,0,n,array);
drm.display(n,array);
sc.close();//释放sc所占用的空间,如不加这句话,会有警告,但不影响程序

}
public void Digitalrotationmatrix(int num,int begin,int n,int [][]array)
{
if(n<0)//输入的n为奇数时最终停止递归调用
{
return;
}
if(n==0)输入的n为偶数时最终停止递归调用
{
return;//必须加,不加会造成栈溢出,无限循环
}
if(n==1)//输入的n为奇数时填最中间的数字
{
array[begin][begin]=num;
}
//开始分块
//区域A
int i=begin;
int j=begin;
for(int k=0;k<n-1;k++)
{
array[i][j]=num;
num++;
j++;
}
//区域B
for(int k=0;k<n-1;k++)
{
array[i][j]=num;
num++;
i++;
}
//区域C
for(int k=0;k<n-1;k++)
{
array[i][j]=num;
num++;
j--;
}
//区域D
for(int k=0;k<n-1;k++)
{
array[i][j]=num;
num++;
i--;
}
Digitalrotationmatrix(num,begin+1,n-2,array);//每调用一次,完成一圈,begin+1进入内层圈;完成一圈,掐头去尾,n-2
}
public void display(int n,int array [][])//输出
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
System.out.printf(array[i][j]+"t");//wdnmd太歪了,制表符牛逼
if(j==n-1)
{
System.out.println("");
}
}
}
}

}

最后

以上就是干净超短裙为你收集整理的Java第三次作业数字旋转方阵--分治算法的全部内容,希望文章能够帮你解决Java第三次作业数字旋转方阵--分治算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部