魔方矩阵
题目标题:
魔方矩阵(彭纪良)
题目描述:
输入一奇数n(n<20),打印出1->n*n构成的魔方矩阵。
魔方矩阵的行列及对角线的和都相等。
输入描述:
输入一奇数n(n<20)
输出描述描述:
打印出1->n*n构成的魔方矩阵,每一个数据之间用一个空格隔开,但每行的最后一个数据后不能有空格.所有输出的最后一行不能有回车
样式输入:
3
样式输出:
8 1 6
3 5 7
4 9 2
解法一:
#include<stdio.h> main() { int a[20][20]={0},i,j,k,n; scanf("%d",&n); i=0;j=n/2;a[i][j]=1; /*j=n/2与j=(n-1)/2效果相同,因为整型数运算后取整去余*/ for(k=2;k<=n*n;k++) { i=i-1;j=j+1; if(i<0) i=n-1; /*行的限制*/ if(j>n-1) j=0; /*列的限制*/ if(a[i][j]!=0) i++;/*赋值对象已被赋值的情况*/ a[i][j]=k; } /*魔方方阵各元素赋值,要经过三次判断以确保正确赋值*/ for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
printf("%d",a[i][j]); if(j<n-1)
printf(" "); } if(i<n-1)
printf("\n"); }
} /*魔方方阵输出*/
解法二:
#include<stdio.h> void main() { int a[20][20]={0},n,i,j,h,l; scanf("%d",&n); a[0][(n-1)/2]=1;h=0;l=(n-1)/2; for(i=2;i<=n*n;i++) /*n的平方喔*/ { if (h!=0 && l!=(n-1) && a[h-1][l+1]==0){a[h-1][l+1]=i;h=h-1;l=l+1;} else if(h==0 && l!=(n-1) && a[n-1][l+1]==0){a[n-1][l+1]=i;h=n-1;l=l+1;} else if(h!=0 && l==(n-1) && a[h-1][0]==0) {a[h-1][0]=i;h=h-1;l=0;} else if(h==0 && l==(n-1) && a[n-1][0]==0) {a[n-1][0]=i;h=n-1;l=0;} else{ a[h+1][l]=i;h=h+1;l=l;} } for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
printf("%d",a[i][j]); if(j<n-1)
printf(" "); } if(i<n-1)
printf("\n"); } }