「魔方阵java」魔方阵是什么

博主:adminadmin 2022-12-21 19:57:08 61

今天给各位分享魔方阵java的知识,其中也会对魔方阵是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

【急】请问三道题目用java怎么做

package reptile;

import java.util.Scanner;

public class TestMultiplyDemo

{

public static void main(String[] args)

{

// TODO Auto-generated method stub

int n;

System.out.println("请输入魔方单行或者单列的值");

Scanner sc = new Scanner(System.in);

n = sc.nextInt();

System.out.println("请输入魔方的每个位置的数值 以空格隔开");

sc = new Scanner(System.in);

String string = sc.nextLine();

int[][] m = new int[n][n];

System.out.println(string + "!!!!");

String[] strings = string.split(" ");

System.out.println(strings.length);

int k = 0;

boolean flag = true;

int minsum = (1 + n*n)*n/2;

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

int rowSum = 0;

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

m[i][j] = Integer.parseInt(strings[k]);

k++;

rowSum += m[i][j];

}

if(rowSum != minsum){

flag = false;

}

if(!flag){

break;

}

}

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

int lineSum = 0;

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

//m[i][j] = Integer.parseInt(strings[k]);

k++;

lineSum += m[j][i];

}

if(lineSum != minsum){

flag = false;

}

if(!flag){

break;

}

}

int X1Sum = 0;

int X2Sum = 0;

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

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

//m[i][j] = Integer.parseInt(strings[k]);

k++;

if(i == j){

X1Sum += m[j][i];

}

if(i + j == n -1){

X2Sum += m[j][i];

}

}

}

if(X1Sum != minsum || X2Sum != minsum){

flag = false;

}

if(flag){

System.out.println("这个正方形是魔方阵");

}else{

System.out.println("这个正方向不是魔方阵");

}

}

}

魔方先提交了 我觉得这个最难

package reptile;

import java.text.DecimalFormat;

import java.util.Scanner;

public class TestGradeAdd

{

public static void main(String[] args)

{

// TODO Auto-generated method stub

DecimalFormat df = new DecimalFormat("######0.00");

Scanner sc = new Scanner(System.in);

System.out.println("请输入你 要输入个加数个数");

int n = sc.nextInt();

int[] m = new int[n];

double sum = 0;

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

m[i] = sc.nextInt();

System.out.println("输入" + m[i]);

double temp = getResult(m[i]);

df.format(temp);

sum += temp;

}

System.out.println("最后的结果是" + sum);

}

public static double getResult(int n){

double sum = 0;

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

double temp = 1.0/i;

sum +=temp;

}

return sum;

}

}

幻方java,这个编程哪里有问题,为什么判断不出来

public class Magic {

private int n;

private int[][] I;

private int[][] J;

public Magic(int n) {

this.n = n;

}

public int[][] getMagic(){

int[][] M=null;

if(n=2)return M;

if(n%2==1){

meshGrid();

M=new int[n][n];

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

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

int a=mod(I[i][j]+J[i][j]-(n+3)/2,n);

int b=mod(I[i][j]+2*J[i][j]-2,n);

M[i][j]=n*a+b+1;

}

}

else if(n%4==0){

meshGrid();

M=reshape();

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

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

int a=(int)Math.floor(mod(I[i][j],4)/2.0);

int b=(int)Math.floor(mod(J[i][j],4)/2.0);

if(a==b){

M[i][j]=n*n+1-M[i][j];

}

}

}

else{

int p=n/2;

Magic magic=new Magic(p);

int[][] temp=magic.getMagic();

M=new int[n][n];

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

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

M[i][j]=temp[i][j];

M[i][j+p]=temp[i][j]+2*p*p;

M[i+p][j]=temp[i][j]+3*p*p;

M[i+p][j+p]=temp[i][j]+p*p;

}

}

int k=(n-2)/4;

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

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

int t=M[i][j];

M[i][j]=M[i+p][j];

M[i+p][j]=t;

}

}

for(int j=n-k+1;jn;j++){

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

int t=M[i][j];

M[i][j]=M[i+p][j];

M[i+p][j]=t;

}

}

int t=M[k][0];M[k][0]=M[k+p][0];M[k+p][0]=t;

t=M[k][k];M[k][k]=M[k+p][k];M[k+p][k]=t;

}

return M;

}

private void meshGrid(){

if(n2){

I=new int[n][n];

J=new int[n][n];

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

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

I[i][j]=i+1;

J[i][j]=j+1;

}

}

}

private int[][] reshape(){

if(n2){

int[][] M=new int[n][n];

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

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

M[i][j]=i*n+j+1;

}

return M;

}

return null;

}

private int mod(int a,int n){

int m=a%n;

if(m0)

m+=n;

return m;

}

public void printMagic(){

this.getMagic();

int[][] a=this.getMagic();

for(int i=0;ia.length;i++){

for(int j=0;ja[i].length;j++){

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

}

System.out.println();

}

}

}

小时候看过一道有趣的题,1,2,3,4,5,6,7,8,9进行如下排列,横,竖,斜全是15

/* 参考

*/

/*

0 1 2

+------Y

0 |4 9 2

1 |3 5 7

2 |8 1 6

X

*/

#include stdio.h

#define N 3

/* N 必须为奇数 */

void main()

{

int arr[N][N]={0};

int i,j;

int nowx,nowy;

nowx=0;

nowy=N/2;

i=1;

while( i=N*N )

{

if( arr[nowx][nowy]==0 )

{

arr[nowx][nowy]=i;

nowx=(nowx-1 +N)%N;

nowy=(nowy+1 +N)%N;

i++;

}

else

{

nowx=(nowx-1 + N)%N;

nowy=(nowy-1 +N)%N;

}

}

for( i=0; iN; i++)

{

for( j=0; jN; j++)

printf("%4d",arr[i][j]);

puts("");

}

}

问题补充里是题目:

我有一个C++版的,你的这种算法只能算出奇数的幻方(魔方)阵,我那个程序可以算出奇数和偶数的,需要留个言,我可以改成c语言版的,发给你

关于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和魔方阵是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-21,除非注明,否则均为首码项目网原创文章,转载请注明出处。