代码改变世界

魔方程序

2012-09-20 14:07    阅读(173)  评论(1)    收藏  举报

魔方是一个N * N的矩阵,它的横,竖,斜相加均相等。

一种关于构建N为基数的魔方的算法是:

把1置于[0][(N - 1) / 2],然后按数字顺序依次左上方移动,如果左或上越界则移动到其对边,如果移动后的位置已有放置元素,则将其移动到移动前那个元素的下方。



#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 15

int main(void)
{
    static int square[MAX_SIZE][MAX_SIZE];
    int i,j,row,column;
    int count;
    int size;

    printf("输入构造魔方的尺寸");
    scanf("%d", &size);

    if (!(size % 2)) {
        printf("尺寸必须为基数");
    }
    /*初始化魔方*/
    for (i = 0; i < size; i++)
        for (j = 0; j < size; j++)
            square[i][j] = 0;
    i = 0;
    j = (size - 1) / 2;
    square[i][j] = 1;
    for (count = 2; count <= size * size; count++) {
        row = (i - 1) < 0 ? (size - 1) : (i - 1);/*上移动*/
        column = (j - 1) < 0 ? (size - 1) : (j - 1);/*左移动*/
        if(square[row][column]) {/*如果此位置上已有元素*/
            i = (++i) % size;//放到当前指向的下面
        } else {
            i = row;
            j = column;
        }
        square[i][j] = count;
    }
    for (i = 0; i < size; i++) {
        for (j = 0; j < size; j++) {
            printf("%5d", square[i][j]);
        }
        printf("\n");
    }
}