代码改变世界

Sicily/1318. Magic Square

2011-07-27 18:19  Min·zc  阅读(275)  评论(0编辑  收藏  举报

仔细看题目下面给的hint


#include <iostream>

#include <memory.h>
#include <cstdio>
using namespace std;
int ans[16][16];
int main()
{
        int n;
        int t=0;
        while(cin>>n)
        {
                t++;
                if(t!=1)
                        cout<<endl;
                memset(ans,0,sizeof(ans));
                int x,y;
                x=n/2;
                y=0;
                int cnt=0;
                for(int i=1;i<=n*n;i++)
                {
                        ans[y][x]=i;
                        cnt++;
                        if(cnt==n)
                        {
                                y++;
                                cnt=0;
                        }
                        else
                        {
                                x++;
                                y--;
                        }
                        if(x>=n)
                                x=0;
                        if(y<0)
                                y=n-1;
                        if(y>=n)
                                y=0;
                }
                int sum=0;
                for(int i=1;i<=n*n;i++)
                        sum+=i;
                sum/=n;
                cout<<"n="<<n<<", sum="<<sum<<endl;
                for(int i=0;i<n;i++)
                {
                        for(int j=0;j<n;j++)
                        {
                                if(n<4)
                                        printf(%d",ans[i][j]);
                                else if(n<10)
                                        printf(%2d",ans[i][j]);
                                else
                                        printf(%3d",ans[i][j]);
                        }
                        cout<<endl;
                }
                
        }
}