zoukankan      html  css  js  c++  java
  • 神奇的幻方

    幻方是一种很神奇的 N*NNN 矩阵:它由数字 1,2,3,cdots cdots ,N imes N1,2,3,,N×N 构成,且每行、每列及两条对角线上的数字之和都相同。

    当 NN 为奇数时,我们可以通过下方法构建一个幻方:

    首先将 11 写在第一行的中间。

    之后,按如下方式从小到大依次填写每个数 K (K=2,3,cdots,N imes N)K(K=2,3,,N×N) :

    1. 若 (K-1)(K1) 在第一行但不在最后一列,则将 KK 填在最后一行, (K-1)(K1) 所在列的右一列;
    2. 若 (K-1)(K1) 在最后一列但不在第一行,则将 KK 填在第一列, (K-1)(K1) 所在行的上一行;
    3. 若 (K-1)(K1) 在第一行最后一列,则将 KK 填在 (K-1)(K1) 的正下方;
    4. 若 (K-1)(K1) 既不在第一行,也最后一列,如果 (K-1)(K1) 的右上方还未填数,则将 KK 填在 (K-1)(K1) 的右上方,否则将 LL 填在 (K-1)(K1) 的正下方。

    现给定 NN ,请按上述方法构造 N imes NN×N 的幻方。

    输入输出格式

    输入格式:

    一个正整数 NN ,即幻方的大小。

    输出格式:

    共 NN 行 ,每行 NN 个整数,即按上述方法构造出的 N imes NN×N 的幻方,相邻两个整数之间用单空格隔开。

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[40][40],x,y;
    int main(){
    	//freopen("magic.in","r",stdin);
    	//freopen("magic.out","w",stdout);
    	scanf("%d",&n);
    	a[1][n/2+1]=1;
    	x=1,y=n/2+1;
    	for(int i=2;i<=n*n;i++)
    	{
    		if(x==1&&y!=n)
    			x=n,y+=1;
    		else if(x!=1&y==n)
    		x-=1,y=1;
    		else if(x==1&&y==n)
    		x+=1;
    		else if(x!=1&&y!=n)
    		{
    			if(a[x-1][y+1]==0)
    			x-=1,y+=1;
    			else
    			x+=1;
    		}
    		a[x][y]=i;
    	}
    	for(int i=1;i<=n;i++)
    	{
    		int k=0;
    		for(int j=1;j<=n;j++)
    	{
    		if(k==0)
    		{
    			printf("%d",a[i][j]);
    			k=1;
    		}
    		else
    		printf(" %d",a[i][j]);
    	}
    	printf("
    ");
    	}
    	return 0;
    }

    题解:

    一道简单的模拟题,按照要求水一下就可以了,轻松愉快!!!

  • 相关阅读:
    【转】提高VR渲染速度的最好方法(经典转载)
    【转】提高VR渲染速度的关键
    【转】怎样提高VR渲染速度
    MySql学习05---数据类型
    MySql学习04----数据库表的基本操作
    MySql学习03----数据库基本操作
    MySql学习02----SQL编程的基本概念
    MySql学习01----数据库简介
    MySql学习路线00
    maven07-----maven中的聚合与继承
  • 原文地址:https://www.cnblogs.com/xxmxxm/p/11152113.html
Copyright © 2011-2022 走看看