java magic square 生成算法分析

本文解析了一段代码,该代码利用巧妙的斜线填充算法生成奇数阶的魔法矩阵(magicsquare)。通过理解填充规则,如从1开始逐行递增,遵循特定行/列移动模式,确保每行、每列和对角线和相等,作者揭示了算法背后的逻辑和其如何满足魔法矩阵的必要条件。

       在前一段时间所做的的软件构造实验一中有一个很有趣的实验部分,magic square。这一部分要求是写一个判断任意n*n矩阵是否为magic square的代码,为其给出的一个代码画出流程图并测试其结果是否正确。

        首先简单介绍一下magic square的定义,magic square是一个由整数构成的矩阵,简单来说就像数独一样,要求矩阵内的每一个整数均不相同,同时每一行,每一列以及对角线之和应是相等的。

         需要注意的是,可以通过数学证明来得到,一个矩阵为magic square的充要条件是矩阵内的整数均不同,位于中值的数位于矩阵正中心,每一行每一列之和相等。

         这个实验的这一部分第一个小要求很简单,这里直接贴出代码:

static boolean isLegalMagicSquare(String fileName) throws FileNotFoundException {
		File file = new File(fileName);
		Reader reader = new InputStreamReader(new FileInputStream(file));
		int temp, gint = 0, values1 = 0, values0 = 0;
		char chartemp;
		String temps = "00";
		int orderint[][] = new int[200][200];
		int i = 0, j = 0;
		try {
			while((temp = reader.read()) != -1) {
				chartemp = (char)temp;
				if(chartemp <= '9' && chartemp >= '0')
				{
					temps = temps + chartemp
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值