import java.util.Scanner;
public class Test3_6_zxj
{
复制代码
1
2
3
4public 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所占用的空间,如不加这句话,会有警告,但不影响程序
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63} 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第三次作业数字旋转方阵--分治算法内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复