| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 839 人关注过本帖
标题:奇数阶魔方阵不得结果。望高手指点。先谢谢。
取消只看楼主 加入收藏
静夜书生
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-3-18
收藏
 问题点数:0 回复次数:2 
奇数阶魔方阵不得结果。望高手指点。先谢谢。
魔方阵的排列规律如下:
(1)将1放在第一行中间一列;
(2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1
(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);
(4)当上一个数的列数为n时,下一个数的列数应为1,行数减去1。
(5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。
#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,k,m,n;
    int a[16][16]={0};
    do
    {
        scanf("%d",&i);
    }


    while(i>=15||i%2==0||i<0);//初始化,输入阶数 i
    m=i;
    a[0][(i-1)/2]=1;//将1放在第一行中间一列;

    j=0;k=(i-1)/2;
    for (i=2;i<=m*m;i++)
    {
        j=j-1;//从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1

        k=k+1;
        
        if (j<0)//如果上一个数的行数为1,则下一个数的行数为n(指最下一行);
            j=m-1;
        else if (k==(m-1))//当上一个数的列数为n时,下一个数的列数应为1,行数减去1
            k=0;
        else if (a[j][k]!=0)//如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。
        {
            
            j=j+2;
            k=k-1;
        }
        else if (j==0&&k==(m-1))
        {
            j=j+2;
            k=k-1;
        
        }
        a[j][k]=i;
    }


    printf("this is the magic array:\n");//打印结果。
    for (j=0;j<m;j++)
    {
        for(k=0;k<m;k++)
        {
            printf("%3d",a[j][k]);
        }
        printf("\n");
    }


    return 0;
}
搜索更多相关主题的帖子: 魔方 奇数 int 结果 
2008-04-04 08:29
静夜书生
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-3-18
收藏
得分:0 
改的非常不错。
的确是前后矛盾。你说矛盾多好。在我看了又看之后。我看到矛盾!!
2008-04-04 09:58
静夜书生
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-3-18
收藏
得分:0 
Think like a computer .it is so difficult
2008-04-04 10:00
快速回复:奇数阶魔方阵不得结果。望高手指点。先谢谢。
数据加载中...
 
   



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

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