• 奇数阶魔方阵


    原题

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

    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("
    ");
        }
        /* 释放存储空间 */
        for(index = 0; index < size; index++)
        {
            free(arr[index]);
            arr[index] = NULL;
        }
        free(arr);
        arr = NULL;
        
        return 0;
    }
  • 相关阅读:
    并发和并行的区别
    fiddler-打断点(bpu)
    fiddler操作
    fiddler手机抓包
    面试题1
    Linux查看日志常用命令
    HTMLTestRunner
    mysql数据库无法插入特殊字符报错
    mybatis解决属性名和数据库字段名不一致问题
    Vue路由的使用简单实例
  • 原文地址:https://www.cnblogs.com/jianxinzhou/p/3918415.html
Copyright © 2020-2023  润新知