zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    Gist
    Gist
    Gist
    汉字编码与其16进制对照
    Horizon组件安装详解
    Github目录生成器
    MVC模式网站编写经验总结
    Java多线程小结
    JGit与远程仓库链接使用的两种验证方式(ssh和https)
    Peterson算法与Dekker算法解析
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/9501874.html
Copyright © 2011-2022 走看看