「魔方阵java」魔方阵是什么
今天给各位分享魔方阵java的知识,其中也会对魔方阵是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、【急】请问三道题目用java怎么做
- 2、幻方java,这个编程哪里有问题,为什么判断不出来
- 3、小时候看过一道有趣的题,1,2,3,4,5,6,7,8,9进行如下排列,横,竖,斜全是15
- 4、问题补充里是题目:
- 5、关于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和魔方阵是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-21,除非注明,否则均为
原创文章,转载请注明出处。