趣味魔方 每行每列对角线的和相等 C语言

本文介绍了Coxeter提出的生成奇数阶魔方的方法,通过在C语言中实现该算法,确保魔方的每一行、每一列以及对角线上的数字和都相等。程序代码成功填充了魔方,并展示了运行结果。
摘要由CSDN通过智能技术生成

Coxeter提出生成奇数阶魔方的方法:

开始时,在魔方第一行的中间一格放1,然后重复以下步骤:

移动到左上一格,把当前的数加1放在这个位置上。如果移动时超出魔方范围,则想象与当前状态完全相同的另一个魔方,(对齐)紧靠在超出的那条边界线上,因而可以继续。如果移动的格子已经放了数字,则从这个位置向正下方移动一格。直到把所有格子填满。


程序代码:

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 15
void main()
{
    int square[MAX_SIZE][MAX_SIZE];
    int i,j,row,col;
    int count;
    int size;
    printf("Enter the size of the square:");
    scanf("%d",&size);
    if(size<1||size>MAX_SIZE+1){
        fprintf(stderr,"Error!size is out of range!");
        exit(EXIT_FAILURE);
    }
    if(!(size%2)){
        fprintf(stderr,"Error!Size is even");
        exit(EXIT_FAILURE);
    }
    for(int i=0;i<size;i++){
        for(int j=0;j<size;j++){
            square[i][j]=0;
        }
    }
    square[0][(size-1)/2]=1;
    i=0;j=(size-1)/2;
    for(count=2;count<size*size;count++){
        row=(i-1<0)?(size-1):(i-1);
        col=(j-1<0)?(size-1):(j-1);
        if(square[row][col]){
            i=(++i)%size;
        }else{
            i=row;
            j=(j-1<0)?(size-1):--j;
        }
        square[i][j]=count;
    }
    printf("Magic Square of size %d:\n\n",size);
    for(i=0;i<size;i++){
        for(j=0;j<size;j++){
            printf("%5d",square[i][j]);
        }
        printf("\n");
    }
}



运行结果截图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值