Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40845
  • 博文数量: 12
  • 博客积分: 473
  • 博客等级: 下士
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-05 22:17
文章分类
文章存档

2011年(3)

2010年(9)

分类: C/C++

2010-11-12 11:17:03

奇数阶魔方阵_动态数组实现
 
看了概念,写的代码。
双偶阶、单偶阶的还没有写出来。写完再别贴上吧
 
上代码:

//奇数阶魔方阵的排列
#include<stdio.h>
#include<stdlib.h>

void main()
{
    int **a;
    int i,j,n,k=1,_i,_j;
    
    do{
        printf("输入一个奇数: ");
        scanf("%d",&n);
        fflush(stdin);
    }while(n%2==0||n<3);

    a=(int **)malloc(n*sizeof(int *));//建动态数组
    if(!a) exit(-1);
    for(i=0;i<n;i++)
    {
        a[i]=(int *)malloc(n*sizeof(int ));
        if(!a[i]) exit(-1);
    }

    for(i=0;i<n;i++) //动态数组初始为0
        for(j=0;j<n;j++)
            a[i][j]=0;


    i=0; //组建魔方阵
    j=n/2;
    a[i][j]=k++;
    for(;;)
    {
        _i=(i-1+n)%n;
        _j=(j+1)%n;
        if(a[_i][_j]==0) a[i=_i][j=_j]=k++;
        else
        {
            _i=(i+1)%n;
            _j=j;
            if(a[_i][_j]==0) a[i=_i][j=_j]=k++;
            else break;
        }
    }

    for(i=0;i<n;i++) //输出魔方阵
    {
        printf("\n");
        for(j=0;j<n;j++)
            printf("%8d",a[i][j]);
    }
    getchar();
    
}


阅读(1201) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-12 17:16:05

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com