魔方矩阵

题目标题:

魔方矩阵(彭纪良)  

 

题目描述:

输入一奇数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"); } }

 

 

 

posted @ 2014-04-05 12:20  achst  阅读(2459)  评论(1编辑  收藏  举报