• PAT 1050.螺旋矩阵(25)


    #include <stdio.h>  
    #include <iostream>  
    #include <vector>  
    #include <algorithm>  
    #include<string>
    #include<string.h>
    #include<cmath>
    using namespace std;
    
    bool cmd(int a, int b)
    {
    	return a > b;
    }
    
    int a[100000000], num[10000][10000];
    
    int main()
    {
    	int n;
    	cin >> n;
    	for (int i = 0; i < n; i++)
    	{
    		cin >> a[i];
    	}
    	sort(a, a + n, cmd);
    	int minm = n, minn = 1;
    	for (int i = n; i >= 1; i--)
    	{
    		if (n%i == 0)
    		{
    			if (i >= n / i)
    			{
    				if (i - n / i < minm - minn)
    				{
    					minm = i;
    					minn = n / i;
    				}
    			}
    		}
    	}
    	int rightz = 0, righty = minn, z = 0, downs = 1, downx = minm, leftz = 0, lefty = minn - 2, upx = minm - 2, ups = 1;
    	int right = 0, left = minm - 1, up = 0, down = minn - 1;
    	while (z != n)
    	{
    		for (int i = rightz; i < righty; i++)
    		{
    			if (z == n) break;
    			num[right][i] = a[z++];
    		}
    		right++; rightz++; righty--;
    		for (int i = downs; i < downx; i++)
    		{
    			if (z == n) break;
    			num[i][down] = a[z++];
    		}
    		down--; downs++; downx--;
    		for (int i = lefty; i >= leftz; i--)
    		{
    			if (z == n) break;
    			num[left][i] = a[z++];
    		}
    		left--; lefty--; leftz++;
    		for (int i = upx; i >= ups; i--)
    		{
    			if (z == n) break;
    			num[i][up] = a[z++];
    		}
    		up++; upx--; ups++;
    	}
    	for (int i = 0; i < minm; i++)
    	{
    		for (int j = 0; j < minn; j++)
    		{
    			cout << num[i][j];
    			if (j != minn - 1) cout << " ";
    		}
    		if (i != minm - 1) cout << endl;
    	}
    }


    Fighting~
  • 相关阅读:
    js排序算法01——冒泡排序
    Math Issues
    2017年终总结
    js中的真值和假值
    element UI 中DateTimePicker 回传时间选择
    Equal Sides Of An Array
    javascript数组总结(0504)
    ajax生成html双引号问题
    关于php ci框架ie浏览器路径问题
    ie提示jquer缺少标识符,字符串或数字
  • 原文地址:https://www.cnblogs.com/Archger/p/8451675.html
Copyright © 2020-2023  润新知