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

相关文章

Golang-指定文本,求奇数行正数平方和

在stack看到HENNGE公司的招聘信息,于是去参加了一次线上笔试。对方法发了三道题,此为第一道题——使用Golang处理文本。 下为要求: 仔细思考后,发现一个规律: 第1行指定总行数;偶数行n指定下一行奇数行n+1行的个数;全部数据喂完后出结果,意味着最后是扔进数组,放到最后遍历。 提示: 要求不能使用for;只能使用基本库。 因为Golang的循环语句出来了for,只剩下g

cf 259 b幻方

B. Little Elephant and Magic Square time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Little Elephant loves magic squares very much

链表(篇3)链表中将所有的偶数移到奇数后面不改变原来的相对位置

给定一个整数的链表,写一个函数来修改链表,使得所有偶数出现在修改链表的所有奇数之前。 此外,保持偶数和奇数的顺序相同。 示例: 输入:17-> 15-> 8-> 12-> 10-> 5-> 4-> 1-> 7-> 6-> NULL 输出:8-> 12-> 10-> 4-> 6 - > 17-> 15-> 5-> 1-> 7-> NULL 输入:8-> 12-> 10-> 5-> 4-> 1

4.给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)

//给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。//要求:空间复杂度O(1),时间复杂度为O(n)#include<cstdlib>#include<iostream>using namespace std;void reform(int (&arr)[6]){int size=sizeof(arr)/sizeof(int);int left=0,right=siz

统计素数并求和 / 求奇数和

练习4-11 统计素数并求和   (20分) 本题要求统计给定整数MM和NN区间内素数的个数并对它们求和。 输入格式: 输入在一行中给出两个正整数MM和NN(1\le M\le N\le 5001≤M≤N≤500)。 输出格式: 在一行中顺序输出MM和NN区间内素数的个数以及它们的和,数字间以空格分隔。 输入样例: 10 31 输出样例: 7 143 #inclu

第五十四题(调整数组顺序使奇数位于偶数前面)

题目: 54.调整数组顺序使奇数位于偶数前面。 题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分, 所有偶数位于数组的后半部分。要求时间复杂度为O(n)。 思路:分别从数组头开始遍历寻找偶数,从数组尾开始向前遍历寻找奇数,交换寻找到的偶数和奇数。 C++代码: #include "stdafx.h"#include<ctime>#include<iost

java面试:奇数偶数问题

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 解答: public static void main(String[] args) {int [] arr = {2,3,22,6,7,9,17,8};reOrderArray(arr);Arrays.stream

Word中设置奇数页的页眉为一级标题内容;偶数页的页眉为文章题目

1.在Microsoft Word中设置奇数页和偶数页不同的页眉 可以通过以下步骤进行: 打开Word文档:首先,打开你想要设置页眉的Word文档。 进入页眉和页脚编辑模式: 双击文档顶部的页眉区域,或者在“插入”选项卡中点击“页眉”然后选择“编辑页眉”。 设置不同的奇偶页眉: 在页眉和页脚工具栏中,确保勾选了“奇偶页不同”选项。这通常在“设计”选项卡下的“选项”组里。 编辑奇数页页眉:

要求输出1~n*n的自然数构成的魔方阵。(n15且为奇数)

【描述】 输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为       8 1 6       3 5 7       4 9 2 要求输出1~n*n的自然数构成的魔方阵。(n<15且为奇数) 【解题思路】 (1)第一个位置在第一行正中。 (2)新位置应处于 最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置应选 列的最下

调整数顺序使奇数位于偶数前面

剑指offer_14 调整数顺序使奇数位于偶数前面 2018/05/14 星期一 题目:输入一个整数数组,实现一个函数用来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。 思考三分钟。。。 一个简单的思路就是,顺序遍历数组,当我们碰到偶数的时候,就将该偶数后面的所有数字往前移一位,然后将该偶数放到数组移动后末尾挪出来的位置之中。整个时间复