HDU 3927 Math Geek 【这你妹的乱搞】

HDU 3927 Math Geek 【这你妹的乱搞】

链接: http://acm.hdu.edu.cn/showproblem.php?pid=3927

真不想多说。。随便搞。。。

1 2 3 16
4 5 6 15
7 8 9 14
10 11 12 13 的方法构造出来。
然后随便(或者说随机)调整一下。。然后就过了。。。
只能说明幻方的解集很小,反幻方的解集太大了吧。。随便就能够造出来。。。n=3记得特判就好。

代码:
#include  < iostream >
#include 
< cstdio >
using   namespace  std;
#define  maxn 205
int  mat[maxn][maxn];
void  gao()
{
    
int  n;
    scanf(
" %d " , & n);
    
if (n  ==   3 )
    {
        mat[
1 ][ 1 =   7 ;
        mat[
1 ][ 2 =   5 ;
        mat[
1 ][ 3 =   2 ;
        mat[
2 ][ 1 =   1 ;
        mat[
2 ][ 2 =   4 ;
        mat[
2 ][ 3 =   8 ;
        mat[
3 ][ 1 =   3 ;
        mat[
3 ][ 2 =   6 ;
        mat[
3 ][ 3 =   9 ;
    }
    
else
    {
        
int  cnt  =   1 ;
        
for ( int  i  =   1 ;i  <=  n  -   1 ;i ++ )
            
for ( int  j  =   1 ;j  <=  n  -   1 ;j ++ )
                mat[i][j] 
=  cnt ++ ;
        
for ( int  j  =   1 ;j  <=  n;j ++ )
            mat[n][j] 
=  cnt ++ ;
        
for ( int  i  =  n  -   1 ;i  >=   1 ;i -- )
            mat[i][n] 
=  cnt ++ ;
        
for ( int  i  =   1 ;i  <=  n / 2 ;i ++ )
            swap(mat[i][n],mat[n][n
- i + 1 ]);
    }
    
for ( int  i  =   1 ;i  <=  n;i ++ )
        
for ( int  j  =   1 ;j  <=  n;j ++ )
            printf(
" %d%c " ,mat[i][j],(j == n) ? ' \n ' : '   ' );
}
int  main()
{
    
int  t;
    scanf(
" %d " , & t);
    
for ( int  i  =   1 ;i  <=  t;i ++ )
    {
        printf(
" Case #%d:\n " ,i);
        gao();
    }
}
Ctrl+v

你可能感兴趣的:(HDU 3927 Math Geek 【这你妹的乱搞】)