/***魔术矩阵,也被称为魔方矩阵。目前魔术矩阵主要有三种结构: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年已为茌平众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
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;
}
}
//进行数组的打印
public static void print(int[][]k){
for(int i=0;ik.length;i++){
for(int j=0;jk[i].length;j++){
if(k[i][j]!=0){
System.out.print(k[i][j]);
}else{
System.out.print(" ");
}
//完成了,请楼主测试吧~~~ 这个就是模拟矩阵旋转的问题
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;
}
}