zoukankan      html  css  js  c++  java
  • Magic Odd Square (思维+构造)

    Find an n × n matrix with different numbers from 1 to n2, so the sum in each row, column and both main diagonals are odd.

    Input

    The only line contains odd integer n (1 ≤ n ≤ 49).

    Output

    Print n lines with n integers. All the integers should be different and from 1 to n2. The sum in each row, column and both main diagonals should be odd.

    Examples

    Input

    1
    

    Output

    1
    

    Input

    3
    

    Output

    2 1 4
    3 5 7
    6 9 8

    这个题在中间的菱形区域是奇数,其余为偶数

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<set>
    #include<map>
    #include<vector>
    #include<cmath>
    
    const int maxn=3e5+5;
    typedef long long ll;
    using namespace std;
    
    int a[maxn];
    int b[maxn];
    int Map[200][200];
    int main()
    {
    	int n;
    	cin>>n;
    	memset(Map,0,sizeof(Map));
    	int cnt1=0;
    	int cnt2=0;
    	for(int t=1;t<=n*n;t++)
    	{
    		if(t%2==0)
    		{
    			a[cnt1++]=t;
    		}
    		else
    		{
    			b[cnt2++]=t;
    	    }
    	}
    	int cnt3=0;
    	for(int t=0;t<n;t++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			if(j>=n/2-t&&j<=t+n/2&&j<=n-1+n/2-t&&j>=t-n/2)
    			{
    				Map[t][j]=b[cnt3];
    				cnt3++;
    			}
    		}
    	}
    	int cnt4=0;
    	for(int t=0;t<n;t++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			if(Map[t][j]==0)
    			{
    				Map[t][j]=a[cnt4];
    				cnt4++;
    			}
    		}
    	}
    	for(int t=0;t<n;t++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			cout<<Map[t][j]<<" ";
    		}
    		cout<<endl;
    	}
    }
    
  • 相关阅读:
    sobel
    构造函数
    #pragma once & ifnde
    #pragma comment
    SET容器
    重载[] int& operator[ ]( )
    仿函数 operator()()
    remove_if erase
    vector
    map
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781784.html
Copyright © 2011-2022 走看看