奇数阶魔方阵

原题

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

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;
}

转载于:https://www.cnblogs.com/jianxinzhou/p/3918415.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值