首页 > 其他 > 详细

魔方矩阵

时间:2014-04-07 16:56:16      阅读:492      评论:0      收藏:0      [点我收藏+]

题目标题:

魔方矩阵(彭纪良)  

 

题目描述:

输入一奇数n(n<20),打印出1->n*n构成的魔方矩阵。   

魔方矩阵的行列及对角线的和都相等。  

 

输入描述:

输入一奇数n(n<20)  

 

输出描述描述:

打印出1->n*n构成的魔方矩阵,每一个数据之间用一个空格隔开,但每行的最后一个数据后不能有空格.所有输出的最后一行不能有回车  

 

样式输入:

3  

 

样式输出:

8 1 6

3 5 7

4 9 2

 

 

解法一:

bubuko.com,布布扣
#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");
 }
}
/*魔方方阵输出*/
bubuko.com,布布扣

 

解法二:

bubuko.com,布布扣
#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");
 }
}
 
bubuko.com,布布扣

 

 

 

魔方矩阵,布布扣,bubuko.com

魔方矩阵

原文:http://www.cnblogs.com/achst/p/3647102.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!