• PAT 1105 Spiral Matrix


    This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrix is filled in from the first element at the upper-left corner, then move in a clockwise spiral. The matrix has m rows and n columns, where m and n satisfy the following: m×n must be equal to N; m≥n; and m−n is the minimum of all the possible values.

    Input Specification:
    Each input file contains one test case. For each case, the first line gives a positive integer N. Then the next line contains N positive integers to be filled into the spiral matrix. All the numbers are no more than 10^​4. The numbers in a line are separated by spaces.

    Output Specification:
    For each test case, output the resulting matrix in m lines, each contains n numbers. There must be exactly 1 space between two adjacent numbers, and no extra space at the end of each line.

    Sample Input:

    12
    37 76 20 98 76 42 53 95 60 81 58 93

    Sample Output:

    98 95 93
    42 37 81
    53 20 76
    58 60 76

    #include<iostream>
    #include<vector>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    bool cmp(const int& a, const int& b){
      return a>b;
    }
    int main(){
      int N, k;
      cin>>N;
      for(k=sqrt((double)N); k>=1; k--)
        if(N%k==0)
          break;
      int row=N/k, col=k;
      int n=row/2;
      vector<int> vi(N,0);
      for(int i=0; i<N; i++)
        cin>>vi[i];
      sort(vi.begin(), vi.end(), cmp);
      vector<vector<int>> graph(row,vector<int>(col,0));
    	int cnt=0;
    	for(int i=0; i<=n; i++){
    		for(int j=i; j<col-i&&cnt<N; j++)
    	    	graph[i][j]=vi[cnt++];
    	    for(int j=i+1; j<row-i&&cnt<N; j++)
    	        graph[j][col-i-1]=vi[cnt++];
    	    for(int j=col-i-2; j>=i&&cnt<N; j--)
    	    	graph[row-i-1][j]=vi[cnt++];
    	    for(int j=row-2-i; j>=i+1&&cnt<N; j--)
    	        graph[j][i]=vi[cnt++];
    	}
    	for(int i=0; i<row; i++){
    		for(int j=0; j<col; j++)
    		    j==0?cout<<graph[i][j]:cout<<" "<<graph[i][j];
    		cout<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    idea 没有 persistence
    java 枚举(二) 级联关系
    java to edi 动态/静态映射
    edi to java
    C# 扩展方法
    最详细的C++对应C#的数据类型转换
    c# .Net随机生成字符串代码
    遍历结构体内部元素和值(Name and Value)
    寒假学习计划
    python os.path模块
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/9501874.html
Copyright © 2020-2023  润新知