成都网站建设设计

将想法与焦点和您一起共享

魔方矩阵java代码 魔方阵数据结构

魔方矩阵的Java版的魔方矩阵算法

/***魔术矩阵,也被称为魔方矩阵。目前魔术矩阵主要有三种结构:N为奇数、N为4的倍数、N为其它偶数(4n+2)。br/*其中目前很多数学家都还在研究“N为4的倍数”、“N为其它偶数(4n+2)”,可见它们对于初学者而言太难。br/*因此此处演示的代码,仅仅考虑N为奇数的情况。br/*此代码作为课件提供给学生参考,在学完数组、循环、判断后练习。br/*@authorluo_wenqiang在126点com*@version1.0.0*/classMagicArray{publicstaticvoidmain(String[]args){/*1.把1放在第一行的最中间2.每个数字向右上角填充3.如果往右已经是最大数了,就从最左边重新继续4.如果往上已经是最大数了,就从最下边重新继续5.如果遇到行数的整数倍,则下一个数直接放到该数的下面*//*1.声明一个n*n二维数组2.声明一个int类型的变量记录每个元素递增的值,每次自加即可3.需要一个嵌套循环来填充二维数组3.1.把横向的索引认为x,x=n/23.2.把纵向的所应认为y,y=03.3.在循环中,先把x、y坐标上的值填充,然后计算下一个坐标*/intn=3;int[][]array=newint[n][n];intcounter=1;//自加的计数器intx=n/2;inty=0;//二维数组,需要用两层的嵌套循环来完成比较简单for(inti=0;in*n;i++){//根据坐标填充值array[y][x]=counter;//计算下一个坐标的位置if(counter%n==0){//如果counter是n的整数倍,下一个坐标是在当前数字的下面y++;}else{x++;y--;if(y0){//如果y超出范围,把y设置成最大y=n-1;}if(x==n){//如果x超出范围,把x设置成最小x=0;}}//使用完以后计数器需要自加counter++;}for(int[]row:array){for(inti:row){System.out.print(i);System.out.print(\t);}System.out.println();}}}

创新互联公司是一家专业提供祁连企业网站建设,专注与网站建设、成都网站制作H5网站设计、小程序制作等业务。10年已为祁连众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

关于Java基础编程的一个问题--回形魔方阵

//完成了,请楼主测试吧~~~ 这个就是模拟矩阵旋转的问题

public class TTT {

public static void main(String[] args){

//RC就是行列数,试试5 6 7 10等数值,都能正确输出,呵呵~~

int rc = 4;

int[][] dat = new int[rc][rc];

int count = 0;

//初始化数据

for(int i=0; irc; i++){

for(int j=0; jrc; j++){

dat[i][j]=-1;

}

}

while(notFinished(dat,rc)){

for(int i=0; irc; i++){

int jj = -1;//存放未被填充数据的行

for(int j=0; jrc; j++){

if(dat[j][i]==-1){

jj = j;break;

}

}

//找到了未填充的行在这里处理

if(jj-1){

while(irc dat[jj][i]==-1){

dat[jj][i++]=++count;

}

dat = rotate(dat,rc);

}

}

}

//这里是修正起始位置的

if(rc%2==1){

for(int i=0; i3; i++)

dat = rotate(dat,rc);

}

else{

dat = rotate(dat,rc);

}

//打印结果

for(int i=0; irc; i++){

for(int j=0; jrc; j++){

System.out.print(dat[i][j]+"\t");

}

System.out.println("\n");

}

}

//对临时结果做逆时针90度旋转

private static int[][] rotate(int[][] dat,int rc){

int[][] tmp = new int[rc][rc];

for(int i=0; irc; i++){

for(int j=0; jrc; j++){

int t = dat[i][j];

tmp[rc-j-1][i]=t;

}

}

return tmp;

}

private static boolean notFinished(int[][] dat,int rc) {

for(int i=0; irc; i++){

for(int j=0; jrc; j++)

if(dat[i][j]==-1)

return true;

}

return false;

}

}

编java程序求解n阶魔方矩阵代码

import java.util.Scanner;

public class Matrix {

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println("请输入n*n数组,n=");

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int[][] a = new int[n][n];//定义n*n数组

int result = 0;

for(int i=0; in; i++){

for(int j=0; jn; j++){

System.out.println("请输入第"+i+"行,第"+j+"列元素:");

a[i][j]=sc.nextInt();

}

result +=a[i][i];

}

System.out.println("对角线元素和为:"+result);

}

}

打印魔方阵

下面是两种方法的代码:

#include stdio.h

void main()

{

int a[16][16];

int i,j,k,p,m,n;

/*初始化*/

p=1;

while(p==1)

{

printf("请输入n.(0n=15,n是奇数)\n");

scanf("%d",n);

if((n!=0)(n=15)(n%2!=0))

{

printf("矩阵阶数是:%d\n",n);

p=0;

}

for(i=1;i=n;i++)

for(j=1;j=n;j++)

a[i][j]=0;

}

/*建立魔方阵*/

j=n/2+1;

a[1][j]=1;

for(k=2;k=n*n;k++)

{

i=i-1;

j=j+1;

if((i1)(jn))

{

i=i+2;

j=j-1;

}

else

{

if(i1) i=n;

if(jn) j=1;

}

if(a[i][j]==0)

a[i][j]=k;

else

{

i=i+2;

j=j-1;

a[i][j]=k;

}

}

/*输出*/

for(i=1;i=n;i++)

{

for(j=1;j=n;j++)

printf("%5d",a[i][j]);

printf("\n");

}

}

#include stdio.h

int i,j,n,a[16][16]; /*全局定义方阵行、列、阶数以及最大方阵容量*/

void creat() /*建立魔方阵*/

{

int k;

j=n/2+1;

a[1][j]=1;

for(k=2;k=n*n;k++)

{

i=i-1;

j=j+1;

if((i1)(jn))

{

i=i+2;

j=j-1;

}

else

{

if(i1) i=n;

if(jn) j=1;

}

if(a[i][j]==0)

a[i][j]=k;

else

{

i=i+2;

j=j-1;

a[i][j]=k;

}

}

}

void print() /*输出魔方阵*/

{

for(i=1;i=n;i++)

{

for(j=1;j=n;j++)

printf("%5d",a[i][j]);

printf("\n");

}

}

void main()

{

int k,p,m;

while(1)

{

p=1;

while(p==1)

{

printf("请输入n(0n=15,n是奇数)\n");

scanf("%d",n);

if((n!=0)(n=15)(n%2!=0))

{

printf("矩阵阶数是:%d\n",n);

p=0;

}

for(i=1;i=n;i++)

for(j=1;j=n;j++)

a[i][j]=0;

}

creat();

print();

}

}


文章标题:魔方矩阵java代码 魔方阵数据结构
URL链接:http://chengdu.cdxwcx.cn/article/doejohi.html