| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 799 人关注过本帖
标题:谁教我单偶幻方的框怎么填
只看楼主 加入收藏
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:5 
谁教我单偶幻方的框怎么填
谁教我单偶幻方的框怎么填
2011-11-29 00:31
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:3 
百度加维基百科,知道了单偶幻方的填法,又在维基百科jana程序的基础上,写出了奇阶幻方的代码,偶阶的还没想到算法
2011-11-29 03:45
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:65 
哈哈,奋战到现在,终于搞定了,单偶幻方,个人人为还算完美啊,奋战了4个小时啊,不知不觉就天亮了,还是很高兴的
程序代码:
#include <stdio.h>
#define N 100
void oujie(int oushu)
{
    int a[N][N]={0},i,j,k=1,n,m;        
    n=oushu/2;
    m=(oushu-2)/4;
    for(i=1,j=3*n/2;k<=n*n;)
    {            
        if(i<0)
        {    i=i+3*n;    continue;    }
        if(j>=3*n)
        {    j=j-3*n; continue;    }
        if(j<0)
        {    j=j+3*n;    continue;    }
        if(a[i][j]!=0)
        {
            i=i+2*3;
            j=j-1*3;
            if(i>3*n)
            {    i=i-3*n;    continue;    }                                                                          
            if(j<0)
                {    j=j+3*n;    continue;    }
            }
        a[i][j]=k++;
        i=i-3;
        j=j+3;                
    }
    
    for(i=1;i<3*n;i=i+3)
        for(j=1;j<3*n;j=j+3)
        {
            if(i<(3*(m+1)-3)||i==(3*(m+1)-2)&&j!=(3*(m+1)-2)||i==(3*(m+1)+1)&&j==(3*(m+1)-2))
                a[i-1][j]=1;
            else if(i==(3*(m+1)+1)&&j!=(3*(m+1)-2)||i==(3*(m+1)-2)&&j==(3*(m+1)-2))
                a[i-1][j]=2;
            
            else a[i-1][j]=3;
        }
    
    for(i=1;i<3*n;i=i+3)
        for(j=1;j<3*n;j=j+3)
        {
            if(a[i-1][j]==1)
            {
                a[i-1][j-1]=4*a[i][j];
                a[i-1][j+1]=4*a[i][j]-3;
                a[i+1][j-1]=4*a[i][j]-2;
                a[i+1][j+1]=4*a[i][j]-1;
            }
            if(a[i-1][j]==2)
            {
                a[i-1][j-1]=4*a[i][j]-3;
                a[i-1][j+1]=4*a[i][j];
                a[i+1][j-1]=4*a[i][j]-2;
                a[i+1][j+1]=4*a[i][j]-1;
            }
            if(a[i-1][j]==3)
            {
                a[i-1][j-1]=4*a[i][j]-3;
                a[i-1][j+1]=4*a[i][j];
                a[i+1][j-1]=4*a[i][j]-1;
                a[i+1][j+1]=4*a[i][j]-2;
            }
        }




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

void jijie(int n)
{
    int a[N][N]={0},i,j,k=1;
        
    for(i=0,j=n/2;k<=n*n;)
    {            
        if(i<0)
        {    i=i+n;    continue;    }
        if(j>=n)
        {    j=j-n; continue;    }
        if(j<0)
        {    j=j+n;    continue;    }
        if(a[i][j]!=0)
        {
            i=i+2;
            j=j-1;
            if(i>n)
                {    i=i-n;    continue;    }
            if(j<0)
                {    j=j+n;    continue;    }
            }
        a[i][j]=k++;
        i--;
        j++;                
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%4d",a[i][j]);
        printf("\n");
    }            
}

main()
{
        int n;
    printf("偶数阶数为4n+2,且阶数为3到66之间\n");
    printf("请输入幻方的阶数:");
    scanf("%d",&n);
    if(n%2==0&&n>=4&&n<66&&(n-2)%4==0)
        oujie(n);
    else if(n%2==1&&n<66)
        jijie(n);
    else
        printf("错误的阶数!\n");
}


[ 本帖最后由 luchar 于 2011-11-29 06:31 编辑 ]
2011-11-29 06:17
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:0 
兄弟,你不用睡觉的么?不困呀?

经验积累中............
2011-11-29 08:13
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:32 
看附件最后三个算法,是不是这个啊。。。。。
经典算法(C).rar (431.33 KB)
2011-11-29 11:11
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:0 
回复 4楼 五当家
当时不困,这不,写完就睡觉了么,睡到现在
2011-11-29 11:41
快速回复:谁教我单偶幻方的框怎么填
数据加载中...
 
   



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

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