问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言程序,求奇阶魔方阵的问题

发布网友 发布时间:2022-05-27 16:43

我来回答

2个回答

热心网友 时间:2023-11-04 12:45

魔方阵的填写方法是:“1立首列中,右1上1,受阻下1。”注意:受阻下1是在没右1上1时下1。.
#include<stdio.h>
void main()
{
int a[10][10]={0};
int n,i,x,y;
printf("Please Input N=");
do
scanf("%d",&n);
while((n%2==0)||(n>9)||(n<3));
x=1;
y=n/2+1;
a[x][y]=1;
for(i=2;i<=n*n;i++)//for循环作用是将数2到n*n填入矩阵
{
x=x-1;//上移一行
y=y+1;//右移一行
if((x+1==1)&&(y-1==n))
/*如果要填入的位置为[0][n+1],按照下面越界处理,应该
在[n][1]处填数,但是事实证明[n][1]处肯定已经填好数了,
故遇阻,相对于前一个填入的数位置[1][n]下移一行(即在
[2][n]填入),如果按照下面的处理对[0][n+1]下移2位左移
一位(即相对于前一个填入的数位置[1][n]下移一行),由于没
有对下移和左移越界处理,如果不特殊处理,必定出错故对这
一特殊情况直接处理令x=2,y=n。
ps:我认为这么写不好,很难理解且容易出错*/
{
x=2;
y=n;
}
if(x==0)//上移越界处理
x=n;
if(y==n+1)//右移越界处理
y=1;
if(a[x][y]!=0)//如果遇阻,下移一行(即相对于上一右一后再下二左一)
{
y=y-1;//左一
x=x+2;//下二
}
a[x][y]=i;
}
for(x=1;x<=n;x++)
{
for(y=1;y<=n;y++)
printf("%4d",a[x][y]);
printf("\n");
}
}
这个不好理解,下面这样写应该好理解点:
#include<stdio.h>
void main()
{
int a[10][10]={0};
int n,i,x,y;
printf("Please Input N=");
do
scanf("%d",&n);
while((n%2==0)||(n>9)||(n<3));
x=1;
y=n/2+1;
a[x][y]=1;
for(i=2;i<=n*n;i++)//for循环作用是将数2到n*n填入矩阵
{
x=x-1;//上移一行
y=y+1;//右移一行

if(x==0)//上移越界处理
x=n;
if(y==n+1)//右移越界处理
y=1;

if(a[x][y]!=0)//如果遇阻,下移一行(即相对于上一右一后再下二左一)
{
y=y-1;//左一
x=x+2;//下二
}

if(x>n)//下移越界处理,由于可能越2界位,故跟其他处理方法不一样,其他的也可以这么写,但这个不能跟其他的一样写,呵呵
x=x-n;
if(y==0)//左移越界处理
y=n;

a[x][y]=i;
}
for(x=1;x<=n;x++)
{
for(y=1;y<=n;y++)
printf("%4d",a[x][y]);
printf("\n");
}
}

热心网友 时间:2023-11-04 12:45

这个涉及到奇阶魔方阵的特征:第一个位置在第一行正中,后一个的位置在前一个位置的右上方,但如果右上方的位置已经超过了方阵上边界,那么新位置应该在所选列的最下面一个位置;如果右上方的位置超出了方阵的右边界,那么新位置应该在所选列的最左边一个位置;如果最近插入的元素为n的整数倍,那么选下面一行同列上的位置为新位置。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? C语言 三阶魔方阵 c语言魔方阵 日系车和德系车,哪种车的性价比更高? C语言 魔方阵 用C语言编写一个程序 输出魔方阵 请编程达人用c语言编写一个程序输出魔方阵 C语言做的魔方阵 华硕k42ei48jz的显存可以扩展吗? 魔方阵的C语言 人在外国打工,但其家人做了医保。得了新冠肺炎国家报销吗? 请教:核心显卡显存可以扩大吗? 新冠现在是自费还是免费 新冠治疗医保报销吗 新冠肺炎疫苗政府报销吗 在TS官网看到了一款毛衣连衣裙很好看,说是百分百聚酯纤维是什么面料哦,纠结中~ 微信好友删除后对方的王者荣耀好友里面还会有我吗 这个的意思是不是是微信好友,但不是游戏好友,如果以前是微信好友,现在微信删了,王者荣耀里还有吗? 08年5月出生的女孩取什么名字好,男孩子取什么名字好 女孩起名字老大叫思语老二叫什么好听 汽车空调不开压缩机不分离一直在运行是怎么回事 求c语言输出所有三阶魔方阵的方法, 用C语言如何编程打印出由1到n^2的自然数构成的魔方阵,? 用C语言实现输出魔方阵的算法 射洪现在还有补课机构吗 我想请问一下,在C语言中魔方阵程序里 int i,l,k,p,n 分别代表了什么? 目前比较受欢迎的成人教育培训机构有高教云教育吗? 现在自贡生猪蹄28元一斤贵吗? 柬埔寨的生猪蹄一市斤多少人民币 温州生猪蹄价格是多少钱一斤 呼和浩特生猪蹄多少钱一斤? 想起个好听的英文名字。 帮忙查个词!急!!!-------Prometheus是英文还是法语?啥意思?怎么读?谢了! error C2065: “i”: 未声明的标识符 PSP 5.03Prometheus 可用的金手指 - 信息提示 error C2065: “L”: 未声明的标识符 需要加什么头文件或者声明什么东西 用ISOTOOL1.84打Prometheus3-v4补丁需要预先装普米3系统吗? PSP3000 6.20系统已破解的主题怎么安装?!!! 想买氧风的新风系统,有款双向流新风除湿机觉得不错,就是价格太高了,在蚌埠是否有代&rlm;理&rlm;商? 安徽昕睿暖通设备销售有限公司怎么样?