博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
魔方阵
阅读量:7088 次
发布时间:2019-06-28

本文共 1018 字,大约阅读时间需要 3 分钟。

#include <stdio.h>

/*魔方阵排列规律(必须是奇数×奇数阵)

 (1)将1放在第一行中间一列
 (2)从2开始直到n*n,各数依次按下列规则存放:
 每一个数存放的行比前一个数行减一
 列数加1
 (3)如果上一数的行数为1,则下一个数行为n(最下一行)
 (4)当上一个数列为n是时,则一下数的列数应为1,行数减1
 (5)如果按上面规则确定位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面
*/
void main(void)
{

 int a[16][16];

 int i,j,k,p,m,n;

 p=1;  //表示阶数为偶数

 while(p==1)   //若输入的数不符合要求,提示重新输入
 {
  printf("请你输入阶数(奇数)(1--15):");
  scanf("%d",&n);

  if((n>=1) && (n<=15) && n%2!=0)

  {
   p=0;
  }
  else
  {
   NULL;
  }
 }

 //初始化

 for(i=1; i<=n; i++)
 {
  for(j=1; j<=n; j++)
  {
   a[i][j]=0;
  }
 }

 //建立魔方阵,i表示行,j表示列

 i=1;  //1所在的行
 j=(n/2)+1; //1所在的列
 a[i][j]=1;  //将1 放在第一行中间一列
 

 for(k=2; k<=n*n; k++) //将2到n*n放到方阵中

 {
  i=i-1;     //行数减1
  j=j+1;  //列数加1
  
  if(i<1 && j>n)  //上一个数是第1行第n列时,则把下一个数放在上一个数的下面
  {
   i=i+2;  //因为行数已经减1,所以需加2
   j=j-1;  //因为列数已经加1,所以需减1
  }
  else
  {
   if(i<1)   //如果上一数的行数为1,则下一个数行为n(最下一行)
    i=n;
      
   if(j>n)  //当上一个数列为n是时,则一下数的列数应为1,行数减1
   {
    j=1; //行数已经减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");
 }
}

转载地址:http://bxfql.baihongyu.com/

你可能感兴趣的文章
linux下在root用户登陆状态下,以指定用户运行脚本程序实现方式
查看>>
FB面经Prepare: Merge K sorted Array
查看>>
模拟链表
查看>>
C#中使用SendMessage在进程间传递数据的实例
查看>>
ADT Android Development Tools
查看>>
OpenGL ES 简单教程
查看>>
nvidia显卡驱动卸载和卸载后的问题
查看>>
Java集合源码分析(二)Linkedlist
查看>>
SpringBoot四大神器之Actuator
查看>>
html复习之标签整理
查看>>
Yii2 使用 faker 生成假数据(转)
查看>>
Consul安装使用
查看>>
tomcat事件处理机制
查看>>
JS BUG 传递数字过大,数据值会变化
查看>>
橡皮筋进度条ElasticProgressBar
查看>>
spring boot引入json,jsonobject,需要指定jdk15
查看>>
企业架构 - 涉众管理(Stakeholder Management)
查看>>
Ubuntu11.10 解决rar文件解压错误
查看>>
sqlplus: error while loading shared libraries: /u01/app/lib/libclntsh.so.11.1
查看>>
ORACLE等待事件:enq: TX - row lock contention
查看>>