首页 > 其他 > 详细

奇数阶魔方阵

时间:2014-08-17 23:58:43      阅读:611      评论:0      收藏:0      [点我收藏+]

原题

打印魔方阵,魔方阵是指这样的方针,每一行、每一列以及对角线的和相等。例如三阶魔方阵:

8 1 6

3 5 7

4 9 2

编程打印奇数阶魔方阵。

提示

问题解决的关键是元素的填充,第一个元素1的位置在第一行正中,新的位置应该处于最近插入元素的右上方;但如果右上方的位置超出方针上边界,则新的位置应该取列的最下一个位置;超出右边界则取行的最左的一个位置;若最近插入的元素为n的整数倍,则选下面一行同列上的位置为新的位置。

实现代码

/*************************************************************************
    > File Name: testmain.c
    > Author: KrisChou
    > Mail:zhoujx0219@163.com 
    > Created Time: Sun 17 Aug 2014 10:09:22 PM CST
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int size;
    int row,col;
    int num = 0;
    int index;
    size = atoi(argv[1]);
    /* 动态分配二维数组,用于存放魔方阵 */
    int **arr = (int**)calloc(size,sizeof(int*));
    for(index = 0; index < size; index++)
    {
        arr[index] = (int*)calloc(size,sizeof(int));
    }
    /* 存放魔方阵 */
    row = 0;
    col = size >> 1;
    arr[row][col] = ++num;
    while(num < size * size)
    {
        if(num % size == 0)
        {
            row = (row + 1) % size;
            col = col;
            arr[row][col] = ++num;
        }else
        {
            row = (row - 1 + size) % size;
            col = (col + 1) % size;
            arr[row][col] = ++num;
        }
    }
    /* 打印 */
    for(row = 0; row < size; row++)
    {
        for(col = 0; col < size; col++)
        {
            printf("%-3d",arr[row][col]);
        }
        printf("\n");
    }
    /* 释放存储空间 */
    for(index = 0; index < size; index++)
    {
        free(arr[index]);
        arr[index] = NULL;
    }
    free(arr);
    arr = NULL;
    
    return 0;
}

奇数阶魔方阵,布布扣,bubuko.com

奇数阶魔方阵

原文:http://www.cnblogs.com/jianxinzhou/p/3918415.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!