java实验 :运用Java二维数组打印“魔方阵”。所谓魔方阵是指这样的矩阵,它的每一行、每一列和对角线之和均相等,要求打印1~25之间由自然数构成的魔方阵

//运用Java二维数组打印“魔方阵”。
//所谓魔方阵是指这样的矩阵,
//它的每一行、每一列和对角线之和均相等.
//要求打印1~25之间由自然数构成的魔方阵。
public class Csj03 {
	public static void main(String[] args) {
		//定义
		int i, j, k;
		int[][] arr =new int[5][5];
		//对数组赋初值
		for (i = 0; i < 5; i++) {                     
			for (j = 0; j < 5; j++) {
				arr[i][j] = 0;                       /* 先令所有元素都为0 */
			}
		}                                          /*
			 										* 一般数值型变量为0; 字符(串)为空或space。 
		//对1先处理	 										* 良好的编程习惯是自己对数组置初值,不要用默认的方法,这样可以提高程序在不同开发系统中得兼容性。*/			 										
		j = 2;                            
		arr[0][j] = 1;                             /* 将1放在第一行中间一列 */
        //对剩下的数处理                          		
		for (k = 2; k <= 25; k++) {                 			 /* 再从2开始处理 */				
			i = i - 1;                               			//总体规律/* 存放的行比前一个数的行数减1 */
			j = j + 1;                               			/* 存放的列比前一个数的列数加1 */
				if ((i < 0) && (j == 5)) {                		// 特殊情况    /* 前一个数是第一行第N列时,把下一个数放在上一个数的下面 */			
					i = i + 2;
					j = j - 1;
			} else {
				if (i < 0)                           			//处理方法:	/* 当行数减到第一行,返回到最后一行 */
						i = 4;
				if (j > 4 )                               			/* 当列数加到最后一行,返回到第一行 */
						j = 0;
			}
			if (arr[i][j] == 0) {                        			 /* 如果该元素为0,继续执行程序 */
				arr[i][j] = k;
			}else {                                      			 /* 如果该元素不为0,就说明要填的数的位置已经被占,则该数放在上一个数的下面 */					
				i = i + 2;
				j = j - 1;
				arr[i][j] = k;
			}
		}
		//打印数组	
		for (i = 0; i < 5; i++) {
			for (j = 0; j < 5; j++) {
				System.out.printf("%3d", arr[i][j]);    			 // C语言中%3d 表示以3位的固定宽度输出整型数。          //注意:不足3位,在前面补空格; 超过3位,按实际位数输出(但是要在其范围内-32768 ~ 32767)。
			}System.out.println();	
		}
	}
}



//魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。
//
//如3×3的魔方阵: 
//    8   1   6 
//    3   5   7 
//    4   9   2  
//魔方阵的排列规律如下:
//(1)将1放在第一行中间一列;
//(2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);
//(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
//(4)当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
//(5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;
  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耳东哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值