| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1449 人关注过本帖
标题:魔方阵,问题。
只看楼主 加入收藏
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
收藏
已结贴  问题点数:20 回复次数:7 
魔方阵,问题。
#define N 7
#include <stdio.h>
int main()
{
     int a[N][N]={0},i=0,j,k;     /*先令所有元素都为0*/
        j=(N-1)/2;
        i=0;
      for(k=1;k<=N*N;)    /*开始处理*/
    {
          if((i<0)&&(j==N))   /*前一个数是第一行第N列时,把下一个数放在上一个数的下面*/
          {
            i=i+2;
            j=j-1;
           }
        else  if(i<0)   /*当行数减到第一行,返回到最后一行*/
             i=N-1;
        else  if(j>N-1)   /*当列数加到最后一行,返回到第一行*/
              j=0;
        else  if(!a[i][j])
        {     /*如果该元素为0,继续执行程序*/
             a[i][j]=k++;         
            i=i-1;
            j=j+1;
        }
       else      /*如果该元素不为0,就说明要填的数的位置已经被占,则该数放在上一个数的下面,放在上一个数的下边不应是i不变吗,为什么是i+2*/
        {
              i=i+2;
               j=j-1;

        }
    }
    for(i=0;i<N;i++)   /* *<="" span="" style="word-wrap: break-word;">输出数组*/
    {
          for(j=0;j<N;j++)
           printf("%-5d",a[i][j]);
          printf("\n\n");
    }
    return 0;
  }



魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。

如3×3的魔方阵:
    8   1   6
    3   5   7
    4   9   2  
搜索更多相关主题的帖子: 魔方阵 元素 for 一个数 一行 
2017-11-30 21:58
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:7 
回复 楼主 花脸
我先说个题外话,具体技术问题还是等有兴趣的来说说吧~

最近发现int a[N][N]={0};这种初始化方式有些编译器不支持,例如我那个手机版的C4droid(能通过编译不过没有效果),建议使用memset来初始化~

PS:了解过一下魔方阵,题目应该说明一下这个只是适用于奇数阶的情况吧,偶数的比较复杂要另外处理~

[此贴子已经被作者于2017-11-30 23:54编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-30 23:53
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 2楼 九转星河
恩好的 谢谢,
2017-12-01 12:29
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 花脸
这样就说谢谢,我不帮忙面子都有点不好意思了~

https://bbs.bccn.net/viewthread.php?tid=204300&highlight=%C4%A7%B7%BD%D5%F3###

话说这个感觉挺有参考价值的~还可以上网搜搜资料~嗯,那里比较详细我就不好再多说些什么了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-01 13:15
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:7 
回复 楼主 花脸
如果执行到你标红的那部分代码, 举个例子
i=4  j=5
填数该填9了, 但是发现a[4][5]已经被赋值了,
接下来分两步  
第一步 先回到填数字8的地方, 即下标 i=4+1=5  j=5-1=4
第二步 数字9应该放在填数字8的地方的下面 , 即下标 i=5+1  j=4(不变)

故此  i+2  j-1

早知做人那么辛苦!  当初不应该下凡
2017-12-01 21:56
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 5楼 炎天
好的懂了谢谢
2017-12-01 23:58
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 4楼 九转星河
2017-12-01 23:58
wikkings
Rank: 2
等 级:论坛游民
帖 子:19
专家分:43
注 册:2017-8-28
收藏
得分:7 
我写过,不过当时题目称之为“幻方”。
2017-12-02 01:07
快速回复:魔方阵,问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015993 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved