[原创]幻方[好象不是魔方哦]
幻方是一个方形整数数组,它每行的和,每列的和及两条对角线上的和全部相等,下面的图1.5给出幻方 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
(2)编写程序用下面的方法生成一个幻方,此方法仅当正方形大小是奇数时可用。开始时将1放在顶行的中间位置,将后续整数2,3,....分别写入前个数字所在位置的上行偏右一格。当到达顶行时(比如1就在顶行),返回到底行继续前进,就好像底行是直接在顶行上面一样。当到达最右列的时,继续到最左列,就好像最左列直接在最右列的右边。当到达的位置已被占据时,就直接在前一个数的下面位置处插入新数。按照这种方法构造的5×5幻方如图1.5中所示。 #include<stdio.h> main() {int i,j,k,a[9][9],x,count=0; printf("请输入小于9的基数:\n"); scanf("%d",&x); i=0; j=x/2; for(k=1;k<=x*x;) { a[i][j]=k++; if((k-1)%x==0) i++; //一般等于5 10 15 20 25 else if(i==0) {i=x-1;j++;} //最上面的时候 else if(j==x-1) {i--;j=0;} //在最左边的时候 else {i--;j++;} } for(i=0;i<x;i++) //用来输出 { for(j=0;j<x;j++){ printf("%d\t",a[i][j]); count++; if(count==x) { printf("\n"); printf("\n"); count=0; } } } }