1053: 奇数幻方

2023-10-13 10:20
文章标签 奇数 1053 幻方

本文主要是介绍1053: 奇数幻方,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。幻方也是一种汉族传统游戏。

在《射雕英雄传》中郭黄二人被裘千仞追到黑龙潭,躲进瑛姑的小屋。瑛姑出了一道题:数字1~9填到三行三列的表格中,要求每行、每列、及两条对角线上的和都相等。这道题难倒了瑛姑十几年,被黄蓉一下子就答出来了。这就是一个最简单的3阶平面幻方。因为幻方的智力性和趣味性,很多游戏和玩具都与幻方有关,如捉放曹操、我们平时玩的六面体,也成为学习编程时的常见问题。

对平面幻方的构造,分为三种情况:N为奇数、N为4的倍数、N为其它偶数(4n+2的形式),其中N 为奇数时,所构造的幻方即为奇数幻方,运用罗伯特的楼梯法来构造最为简单,具体方法如下:(1)将1放在第一行中间一列;(2)从2开始直到n×n止各数依次按下列规则存放:按 45°方向行走,如向右上;每一个数存放的行比前一个数的行数减1,列数加1;(3)如果行列范围超出矩阵范围,则回绕。例如1在第1行,则2应放在最下一行,列数同样加1;(4)如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

奇数幻方是不是很有趣呢?请你按照上述方法构造出指定奇数的奇数幻方吧!
话不多说看看我的代码!!!!
我用了最简的代码
我的思路都在注释了
然后主要是根据题中的方法写出一个代码,然后判断是不是被覆盖了判断a[x][y]是否等于0,x,y分别为下一个点的横坐标,纵坐标。

#include<stdio.h>
int a[120][120];
int main(void)
{int n;scanf("%d",&n);int x,y,num=0;for(int i=1;i<=n*n;i++){if(i==1){a[1][(n+1)/2]=++num;x=1;y=(n+1)/2;}else{if(x-1>=1&&y+1<=n&&a[x-1][y+1]==0)//第一个条件45度下一个坐标为(x-1,y+1){a[x-1][y+1]=++num;x=x-1;y=y+1;	}else if(x-1<1&&y+1<=n&&a[n][y+1]==0)//第二个条件在第一行{a[n][y+1]=++num;x=n;y=y+1;	}else if(y+1>n&&x-1>=1&&a[x-1][1]==0)//第三个隐藏条件在最后一列{a[x-1][1]=++num;x=x-1;y=1;}else//所有条件之外{a[x+1][y]=++num;x=x+1;}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(j!=1)printf(" ");printf("%d",a[i][j]);}if(i!=n)printf("\n");}
}

这篇关于1053: 奇数幻方的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/202542

相关文章

n^3 连续奇数和 java

任何一个自然数m的立方都可以写成连续奇数之和。 如: 1^3=1 2^3=3+5; 3^3=7+9+11 请编程实现;任一自然数n,求组成n^3。 import java.util.Scanner;public class CiFangQiShuHe {public static void main(String[] args) {Scanner input=

hdu-2006-求奇数的乘积

#include<stdio.h> int main() { int n,i,t,sum; while(scanf("%d",&n)!=EOF) { sum=1; for(i=0;i<n;i++) { scanf("%d",&t); if(t%2!=0) sum*=t; } printf("%d\n",sum); }

Hdu 1998Nyoj 734 奇数阶魔方

题目链接:点击打开链接 据说这是组合数学中的一道例题。 题目意思很简单,一开始,没看出来,什么意思。以为是一道找规律题。 其实就是一模拟题,从1---n^2,一直向右上方填数就好。 两个问题: 1.越界问题。 2.已填数这么办?填入该填数的前一个的下方。 代码: #include <cstdio>#include <cstring>#include <algorithm>

C语言| 求1到100之间所有奇数的和偶数之和

思路: 1 用到for循环功能; 2 定义两个循环变量i j , 奇数 i = 1每次加2,偶数 j = 0 每次加2 3 求和放在for 循环中间,每遍历一次就相加。 /* 求1到100之间所有奇数的和 求1到100之间所有偶数之和 */ #include <stdio.h> int main(void) {     int i, j;     int sum1 = 0;     i

探索数组处理:奇数的筛选与替换

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3  欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、数组中的奇数筛选 二、将奇数替换为负一 总结 一、数组中的奇数筛选     在处理数组数据时,经常需要对特定条件的元素进行筛选。其中,筛选数组中的奇数是一个常见的需求。

C语言试题五十之请编写一个函数void function(char *ss),其功能时:将字符串ss中所有下标为奇数位置上的字母转换为大写(若位置上不是字母,则不转换)。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个函数void function(char *ss),其功能时:将字符串ss中所有下标为奇数位置上的字母

MongoDB Windows无法启动服务 错误1053 的一种解决办法

MongoDB Windows无法启动服务 错误1053 的一种解决办法 我遇到的情况是账户的问题,解决办法: Ctrl + Alt + Del 打开任务管理器;服务选项卡找到MongoDB服务,右击 打开服务;再次找到MongoDB服务,右击 属性;登陆选项卡选择成为本地账户,问题解决。

python列表生成式的妙用:区间内奇数求和

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3  欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、案例背景 三、实现步骤 四、案例验证 五、总结 一、引言     在Python编程中,列表生成式(List Comprehension)是一种优雅且高效

面试题14. 调整数组顺序使奇数位于偶数前面

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路1: 用两个list分别存储奇数和偶数,然后再合并到array中 空间换时间O(n),方法比较傻比较傻。 在面试时,注意方法的可扩展性,比如题目可以换成:使得所有的能被3整除的数位于数组的前半部分,其余不被3整除

面试题:调整数字顺序,使奇数位于偶数前面

题目: 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序 使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分 算法1: 利用快速排序的一次划分思想,从2端往中间遍历 时间复杂度:O(n),只遍历一次 空间复杂度:O(1),只在当前数组里面移动,找到就交换 #include <stdio.h>void Move(int* arr, int len){int