用C语言求n阶魔方阵

2023-05-16

  • /*
    • 给出n值,输出n阶魔方阵(每一行,每一列和对角线之和都相等)
    • 1放在第一行中间
    • 从2开始以后的数按以下规则:
    • 每个数比前一个数行数减一,列数加一
    • 当上一个数行数为1,下一个数行数为n
    • 当上一个数列数为n,下一个数列数为1
    • 如果按以上规则确定的位置上已经有数,或上一个数为第一行第n列,把下一个数放在上一个数的下面
      */
#include<stdio.h>
int main()
{
  int n,i,j;
  int x,y;
  int p,q;
  int a[20][20]={0};
  printf("输入一个奇数:");
  scanf("%d",&n);
  x = 0;
  y = (n-1)/2;
  a[x][y]=1;//第一行最中间的数为1

  for(i=2;i<=n*n;i++){

       p=x;q=y;//把上一个元素的位置记录在p q中以便继续使用
       x=x-1;
       y=y+1;
       //如果上一个数为第一行第n列,把下一个数放在上一个数的下面
       if(x== -1&&y==n){
            x=p+1;
            y=q;
      a[x][y] = i;
           // printf("one i值%d",i);
          }
       //当上一个数行数为1时,下一个数行数为
       else if(x== -1&&y<=n-1){

              x = n-1;
            //如果按以上规则确定的位置上已经有数把
            //下一个数放在上一个数的下面
            if(a[x][y]!=0){
               x = p+1;
               y = q;

                }
           // printf("two i值%d",i);

            a[x][y] = i;

         }
       //当上一个数列数为n,下一个数列数为1
       else if(x>=0&&y==n){

            y = 0;
          //如果按以上规则确定的位置上已经有数把
          //下一个数放在上一个数的下面
          if(a[x][y]!=0){
               x = p+1;
               y = q;
  }

           a[x][y] = i;

         }
       //如果没有特殊情况,每个数比前一个数行数减一,列数加一
       else if(x>=0&&y<=n-1){
          // 如果按以上规则确定的位置上已经有数把
          //下一个数放在上一个数的下面
            if(a[x][y]!=0){
               x = p+1;
               y = q;
                }

           a[x][y] = i;

        }
   }

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

      }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用C语言求n阶魔方阵 的相关文章

随机推荐

  • 七牛云配置怎么配CDN

    对象存储 1 1新建空间 xff08 创建空间 xff0c 例如img video txt仓库 xff09 2 融合cdn 2 1域名管理 2 2添加域名 2 3创建域名 域名类型 普通 加速域名 新二级域名 通信协议 先用http建立起此
  • Apache 中文目录浏览乱码解决办法

    http www cnitblog com 201 archive 2010 04 14 65277 html 最近打算建立一个分享资源的网络空间 xff0c 想使用FTP xff0c 但是又觉得不算好用 于是就直接使用Apache的Ind
  • Linux 休眠

    http hi baidu com red woods blog item 721676123f5ced56f819b8d5 html Linux休眠 STD 有shutdown和platform两种方式 xff0c platform需要B
  • vmware workstation 部署Ubuntu22.04 Server系统并配置NAT网络

    目录 一 安装系统 1 下载Ubuntu22 04 Server系统 2 VM安装系统 二 Ubuntu 2204配置静态IP 一 安装系统 1 下载Ubuntu22 04 Server系统 系统下载地址 xff1a https mirro
  • Openstack 中的zone ,aggregates和host及其应用

    在Openstack 实际的应用中 xff0c 经常会被客户或者Boss问到 xff0c 我创建的虚拟机在后端众多物理机上是怎么分配的 这时你最好不要答 你不用考虑后面分配的细节 xff0c 我们的云会自动处理 或者这样的 xff1a 我后
  • 【vim进阶】VIM批量替换文本(命令模式)格式 :{作用范围}s/{替换目标}/{替换内容}/{替换的标志}

    VIM 处理文本的替换 xff08 底行模式 xff09 语法格式 xff1a 作用范围 s 替换目标 替换内容 替换的标志 作用范围分为当前行 全文 选区等等 xff1a s xff1a 当前行替换 s xff1a 全文替换 n1 n2s
  • 我碰到的debian的分辨率设置

    今天下午安装了一个debianlinux系统 进入debian的gnoma之后 xff0c 我发现分辨率无法改变 xff0c 就是800X600 xff0c 在看过 xorg conf之后发现系统是认识我的显示器和显卡的 因此我再设置一下
  • Debian或Ubuntu下squid的安装与基本配置(已验证) - [服务器区]

    转贴自欺欺人 xff1a http linux blogbus com logs 35912092 html 2009 03 01 版权声明 xff1a 转载时请以超链接形式标明文章原始出处和作者信息及本声明 http linux blog
  • Ubuntu彻底卸载mysql/mariadb并且重新安装

    首先删除mysql sudo apt get remove mysql 然后清理残留的数据 dpkg l grep rc awk 39 print 2 39 sudo xargs dpkg P 它会跳出一个对话框 xff0c 你选择yes就
  • C语言 字符串库 strs

    由于C标准库中的字符串处理函数功能太少了 xff0c 因此自己参照这Go语言标准库的strings包的API的功能 xff0c 用C语言写了一个 cstrs地址 xff1a https github com duapple cstrs ht
  • 超简单使用redisson延迟队列做定时任务

    前言 xff1a 在工作开发中很多需求都需要用到定时任务 xff0c 但是市面上多半都是轮询或者固定时间执行的开源工具 xff0c 我之前写过一次基于quartz的定时任务 xff0c 前端和分布式还需要完善 https my oschin
  • 如何禁止chrome浏览器http自动转成https

    Chrome 浏览器 地址栏中输入 chrome net internals hsts在 Delete domain security policies 中输入项目的域名 xff0c 并 Delete 删除可以在 Query domain
  • java等待所有子线程执行完毕再执行

    前言 xff1a 在工作项目中 xff0c 有很多耗时处理都需要开多线程运行 简单的接口可以直接异步处理解决 xff0c 但是对于一些业务逻辑复杂需要同步返回的这时候就需要用到以下三个多线程等待方法了 1 thread join 主线程等待
  • spring-boot的webflux为啥用起来更堵塞?怎么配置线程池

    webfulx 内部使用的是响应式编程 xff08 Reactive Programming xff09 xff0c 以 Reactor 库为基础 基于异步和事件驱动 xff0c 可以让我们在不扩充硬件资源的前提下 xff0c 提升系统的吞
  • 使用druid的工具包改sql的库名,实现单实例分库

    前言 xff0c 没时间解释了 xff0c 先贴代码 1 新增自定义Visitor 自定义Visitor 这里是MySQL xff0c 其他数据库请自行更换 public static class MyReplaceTableVisitor
  • 鸿蒙系统遇到crosswalk(XWalkView)闪退,不兼容问题

    废话我懒得说了 xff0c 分析也懒得分析了 反正我研究了2周 xff0c 最后还是csdn解决了我的问题 xff0c 特此感谢 噩梦是鸿蒙3 0小版本 202开始 xff0c 系统会提示老项目版本过低不能运行 然后我升级了sdkapi 到
  • win安装NVM切换node版本

    安装nvm https github com coreybutler nvm windows releases nvm list 是查找本电脑上所有的node版本 nvm list 查看已经安装的版本 nvm list installed
  • 使用AOP打印日志Controller和DubboService的请求参数和相应参数和响应时间

    撸了今年阿里 网易和美团的面试 xff0c 我有一个重要发现 gt gt gt 前言 xff1a 项目为了方便排查问题都会在请求的接口或者暴露的服务前后都会打上日志 这样就搬出了Spring核心功能AOP xff0c 前两天我问一年工作经验
  • S5P6818裸机编程(点灯和按键点灯)步骤和详解

    一 分析LED的原理图 二 裸机编程的思路 分析原理图 xff0c 理解硬件的控制原理 gt 找到控制LED的GPIO gt 查找CPU的使用手册 xff0c 找到控制GPIO的寄存器 gt 理解寄存器的控制原理 gt 编写程序 xff0c
  • 用C语言求n阶魔方阵

    给出n值 xff0c 输出n阶魔方阵 xff08 每一行 xff0c 每一列和对角线之和都相等 xff09 1放在第一行中间从2开始以后的数按以下规则 xff1a 每个数比前一个数行数减一 xff0c 列数加一当上一个数行数为1 xff0c