美文网首页
1105. Spiral Matrix (25)

1105. Spiral Matrix (25)

作者: 陈洲 | 来源:发表于2017-02-26 23:17 被阅读0次

    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 104. 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 <algorithm>
    
    using namespace std;
    
    void setSize(int &row, int &column, int N)
    {
        int x = row-column;
        int r = row;
        int c = column;
        while(r>c)
        {
            r--;
            if(N%r!=0) continue;
            else
            {   c = N/r;
                if(r<c) return;
                else if(x>(r-c))
                {
                    row = r;
                    column = c;
                    x = r-c;
                }
            }
        }
    }
    void inputArr(vector<int> arr,vector<vector<int> > &m, int row, int column, int r, int c, int n, int N)
    {
        if(n==N) return;
        for(int i=0; i<column&&n!=N; i++) m[r][++c] = arr[n++];
        row--;
        for(int i=0; i<row&&n!=N; i++) m[++r][c] = arr[n++];
        column--;
        for(int i=0; i<column&&n!=N; i++) m[r][--c] = arr[n++];
        row--;
        for(int i=0; i<row&&n!=N; i++) m[--r][c] = arr[n++];
        column--;
        inputArr(arr,m,row,column,r,c,n,N);
    
    }
    bool compare(int a, int b){return a>b;}
    
    int main()
    {
        int N;
        int temp;
        int row;
        int column;
        vector<int> arr;
        vector<vector<int> > m;
        cin >> N;
        for(int i=0; i<N; i++)
        {
            cin >> temp;
            arr.push_back(temp);
        }
        sort(arr.begin(),arr.end(),compare);
        row = N;
        column = 1;
        setSize(row,column,N);
        m.resize(row,vector<int>(column));
        inputArr(arr,m,row,column,0,-1,0,N);
        for(int i=0; i<row; i++)
        {
            for(int j=0; j<column; j++)
            {
                if(j!=0) cout << " ";
                cout << m[i][j];
            }
            cout << endl;
        }
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:1105. Spiral Matrix (25)

          本文链接:https://www.haomeiwen.com/subject/xqvawttx.html