• PAT 1050. 螺旋矩阵(25)


    要想解决本题,要解决以下几个问题:

    1. 获得准确的m、n

    2. 按照题目的要求,以顺时针螺旋的方式安放元素

    代码如下:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int m , n;
    
    void Findmn(int N)
    {
    	int i , j;
    	for(i = 2 ; i * i <= N ; i++)
    	{
    		if(N % i == 0)
    		{
    			j = N / i;
    			if(abs(m - n) > abs (i - j))
    			{
    				m = max(i , j);
    				n = min(i , j);
    			}
    		}
    	}
    }
    
    bool cmp(int a , int b)
    {
    	return a > b;
    }
    
    int main()
    {
    	int N;
    	cin>>N;
    	vector<int> Nums(N);
    	int i,j;
    	for(i = 0 ; i < N ; i++)
    		cin>>Nums[i];
    	sort(Nums.begin(),Nums.end(),cmp);
    	m = N;
    	n = 1;
    	Findmn(N);
    	vector<vector<int> > W(m);
    	for(i = 0 ; i < m ; i++)
    		W[i].assign(n,0);
    	int m1 = m -1, n1 = n , m2 , n2;
    	vector<int> dx(N),dy(N);
    	i = 0;
    	if(N == 1)
    		cout<<Nums[0]<<endl;
    	else
    	{
    		while(n1)
    		{
    			n2 = n1;
    			while(n2--)
    			{
    				dx[i] = 0;
    				dy[i++] = 1;
    			}
    			n1--;
    			m2 = m1;
    			while(m2--)
    			{
    				dx[i] = 1;
    				dy[i++] = 0;
    			}
    			m1--;
    			if(n1 == 0)
    				break;
    			n2 = n1;
    			while(n2--)
    			{
    				dx[i] = 0;
    				dy[i++] = -1;
    			}
    			n1--;
    			m2 = m1;
    			while(m2--)
    			{
    				dx[i] = -1;
    				dy[i++] = 0;
    			}
    			m1--;
    		}
    		int x1 = 0 , y1 = -1;
    		for(i = 0 ; i < N ; i ++)
    		{
    			x1 += dx[i];
    			y1 += dy[i];
    			W[x1][y1] = Nums[i];
    		}
    		for(i = 0 ; i < m ; i++)
    		{
    			cout<<W[i][0];
    			for(j = 1 ; j < n ; j++)
    			{
    				cout<<' '<<W[i][j];
    			}
    			cout<<endl;
    		}
    	}
    
    	system("pause");
    }



  • 相关阅读:
    115. 不同的子序列
    114. 二叉树展开为链表
    基于Docker结合Canal实现MySQL实时增量数据传输
    Docker-Compose
    Docker容器的创建、启动、和停止
    ES集群
    ES
    Docker配置JDK1.8镜像
    Docker及Docker-Compose的使用
    docker安装jdk
  • 原文地址:https://www.cnblogs.com/hkevin/p/5510064.html
Copyright © 2020-2023  润新知