问答文章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

我来回答

3个回答

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

代码一:
#include <stdio.h>
#define N 16 //这里可以修改N的值,并且N只能为偶数
int main()
{
int a[N][N]={0},i,j,k,p,m,n;
p=1;
while(p==1)
{
printf(Enter n(1~%d): ,N-1);/*可以输入小于等于N-1的奇数*/
scanf(%d,&n);
if((n!=0)&&(n<N)&&(n%2!=0)) p=0;
}
i=n+1;
j=n/2+1; /*建立魔方阵*/
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;j=j-1;
}
else
{
if(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)/*输出魔方阵*/
{
for(j=1;j<=n;j++)
printf(%4d,a[i][j]);
printf(\n);
}
}
代码二:(相对于代码一条理更清晰,更简单、更容易理解)
将1~n的平方这几个数构成一个n阶魔方阵。
算法:
依以下法则,你可以很快的写出奇数阶幻方!当然,这种写法只是其中一个答案,而不是唯一答案。
1)将1填入第一行中间;
2)将每个数填在前一个数的右上方。
3)若该位置超出最上行,则改填在最下行的对应位置;
4)若该位置超出最右列,则该填在最左列的对应行位置;
5)若某元素填在第一行最右列,下一个数填在该数同列的下一行;
6)若某数已填好,但其右上角已填了其他数据,则下一个数填在该数同列的下一行位置。
#include<stdio.h>
void main()
{
int a[15][15]={0},i,j,m,n,temp,M;
printf(请输入一个3~15的奇数:\n);
scanf(%d,&M);
i=0;
j=M/2;
a[i][j]=1;
for(temp=2;temp<=M*M;temp++)
{
m=i;
n=j;
i--;
j++;
if(i<0)
i=M-1;
if(j>M-1)
j=0;
if(a[i][j]!=0)
{
i=m+1,j=n;
a[i][j]=temp;
continue;
}
a[i][j]=temp;
}
printf(%d×%d魔方阵:\n,M,M);
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf(%4d,a[i][j]);
printf(\n);
}
}
//(求4的倍数阶幻方)
void main()
{
int i,j,x,y,n,t,k=1;
int a[100][100];
printf(请输入魔方阵的阶数n \n);
scanf(%d,&n);
printf(输出为:\n);
if(n%4==0)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
a[i][j]=k;
k++;
}
x=n-1;
for(j=0;j<n/2;j++,x--)
{
for(i=0;i<n;i++)
if(i%4!=j%4&&(i+j)%4!=3)
{
t=a[i][j];
a[i][j]=a[i][x];
a[i][x]=t;
}
}
x=n-1;
for(i=0;i<n/2;i++,x--)
{
for(j=0;j<n;j++)
if(i%4!=j%4&&(i+j)%4!=3)
{
t=a[i][j];
a[i][j]=a[x][j];
a[x][j]=t;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf(%-4d,a[i][j]);
printf(\n);
}
}
else printf(输入错误\n);
system(pause...);
}

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

效果图:

代码如下:

/*该程序由本人[百度帐号:prende]查阅多项资料后亲自编写,转载请注明出处,谢谢!*/
#include<stdio.h>
int a[200][200]={0};           /*200为我自己定义的,可根据需要修改*/
void JSZ(int n)                                /*奇数魔方阵算法*/
{int p,k,i,j;
 p=0;k=n/2;
 a[p][k]=1;
 for(i=2;i<=n*n;i++)
  {if((i-1)%n==0)
    {if(p==n-1)p=0;
     else p++;
    }
   else
    {if(p==0)p=n-1;
     else p--;
     if(k==n-1)k=0;
     else k++;
    }
   a[p][k]=i;
  }
}
void Ou4bZ(int n)                  /*偶数4的倍数魔方阵算法*/
{int a1[200][200],a2[200][200],i,j;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   {if(i%4==0||(i+1)%4==0)a1[i][j]=j+1;
    else a1[i][j]=n-j;
   }
 for(j=0;j<n;j++)
  for(i=0;i<n;i++)
   {if(j%4==0||(j+1)%4==0)a2[i][j]=n*i;
    else a2[i][j]=(n-1-i)*n;
   }
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   a[i][j]=a1[i][j]+a2[i][j];
}
void N_4OuZ(int n)                   /*偶数非4的倍数魔方阵算法*/
{int s[200],x[200],z[200],y[200],i,p,k,b[200][200]={0};
 z[0]=4;z[1]=10;s[0]=2;s[1]=9;
 for(i=2;i<n/2-1;i++)
  {if(i%2==0)
    {z[i]=z[i-1]+1;
     s[i]=s[i-1]+3;
    }
   else
    {z[i]=z[i-1]+7;
     s[i]=s[i-1]+5;
    }
  }
 y[0]=3;y[1]=5;x[0]=1;x[1]=6;
 for(i=2;i<n/2;i++)
  {if(i%2==0)
    {y[i]=y[i-1]+3;
     x[i]=x[i-1]+1;
    }
   else
    {y[i]=y[i-1]+5;
     x[i]=x[i-1]+7;
    }
  }
 Ou4bZ(n-2);
 for(p=1;p<n-1;p++)
  for(k=1;k<n-1;k++)
   b[p][k]=a[p-1][k-1]+(n*n-(n-2)*(n-2))/2;
 for(p=1;p<n-1;p++)
  for(k=1;k<n-1;k++)
   a[p][k]=b[p][k];
 for(i=0;i<n/2-1;i++)
  {a[0][i]=s[i];
   a[n-2-i][0]=z[i];
  }
 for(i=0;i<n/2;i++)
  {a[n-1][n-2-i]=x[i];
   a[i][n-1]=y[i];
  }
 for(i=0;i<n;i++)
  {if(i==0)a[n-1][0]=n*n+1-a[0][n-1];
   else if(i<n/2-1)a[n-1][i]=n*n+1-a[0][i];
   else if(i==n-1)a[n-1][n-1]=n*n+1-a[0][0];
   else a[0][i]=n*n+1-a[n-1][i];
   if(i>0&&i<n/2)a[i][0]=n*n+1-a[i][n-1];
   if(i>=n/2&&i<n-1)a[i][n-1]=n*n+1-a[i][0];
  }
}
void main()/*主函数*/
{int i,j,n;
 lp:printf("你想要的魔方阵的阶数(1~200): ");
 scanf("%d",&n);
 if(n<1||n==2||n>200)      /*由于没有二阶魔方阵,"n>200"为超出定义范围*/
  {printf("SCANF ERROR!\n");
   goto lp;
  }
 if(n%2==0)
  {if(n%4==0)Ou4bZ(n);
   else N_4OuZ(n);
  }
 else JSZ(n);
 for(i=0;i<n;i++)
  {for(j=0;j<n;j++)
    printf("%6d",a[i][j]);
   printf("\n");
  }
 goto lp;
}

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

奇数阶的魔方阵:

#include <stdio.h>
int main()
{int a[19][19]={0},i,j,i1,j1,k,n;
 scanf("%d",&n);
 if(n>19||n%2==0)return 0;
 i=0;j=n/2;k=1;
 for(i1=0;i1<n;i1++)
 {for(j1=0;j1<n-1;j1++)
    {a[i][j]=k++;
     i=(i==0?n-1:--i);
     j=(j==n-1?0:++j);
}
a[i][j]=k++;
i++;
 }
 for(i=0;i<n;i++)
 {for(j=0;j<n;j++)
    printf("%3d ",a[i][j]);
  printf("\n");  
 }   
 return 0;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 人在外国打工,但其家人做了医保。得了新冠肺炎国家报销吗? 请教:核心显卡显存可以扩大吗? 新冠现在是自费还是免费 新冠治疗医保报销吗 新冠肺炎疫苗政府报销吗 在TS官网看到了一款毛衣连衣裙很好看,说是百分百聚酯纤维是什么面料哦,纠结中~ 微信好友删除后对方的王者荣耀好友里面还会有我吗 这个的意思是不是是微信好友,但不是游戏好友,如果以前是微信好友,现在微信删了,王者荣耀里还有吗? 08年5月出生的女孩取什么名字好,男孩子取什么名字好 女孩起名字老大叫思语老二叫什么好听 汽车空调不开压缩机不分离一直在运行是怎么回事 凉车空调正常,热车没开空调但是压缩机却一直工作 洗衣店好开吗? 我今年52岁想开一家洗衣店,不知有市场吗,能行吗? 汽车是否开启a&#47;c开关压缩机都在转,怎么会费油呢?都没发现这个问题吗 女孩万思语名字能得多少分? 上街防疫站做的核酸,昨天下午3点做的,今早上7点了怎么还没出结果? 春季可以吃的野菜有哪些 怎么做好吃 退休了又返聘了几年现在不干了,想写点感谢的话咋写 感谢单位领导关心退休人员的,退休人员该怎么回复求回复 华硕k42ei48jz的显存可以扩展吗? C语言做的魔方阵 请编程达人用c语言编写一个程序输出魔方阵 用C语言编写一个程序 输出魔方阵 C语言 魔方阵 日系车和德系车,哪种车的性价比更高? c语言魔方阵 C语言 三阶魔方阵 C语言程序,求奇阶魔方阵的问题 求c语言输出所有三阶魔方阵的方法, 用C语言如何编程打印出由1到n^2的自然数构成的魔方阵,? 用C语言实现输出魔方阵的算法 射洪现在还有补课机构吗 我想请问一下,在C语言中魔方阵程序里 int i,l,k,p,n 分别代表了什么? 目前比较受欢迎的成人教育培训机构有高教云教育吗? 现在自贡生猪蹄28元一斤贵吗? 柬埔寨的生猪蹄一市斤多少人民币 温州生猪蹄价格是多少钱一斤 呼和浩特生猪蹄多少钱一斤? 想起个好听的英文名字。