• 1105. Spiral Matrix (25)


    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
    
    一圈圈来,每一圈分四边,如果最内一圈只有一列,四个边只需要两个边。代码中有if语句。
    代码:
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <iomanip>
    
    using namespace std;
    int s[10000],n,a,b,c;
    int t[10000][10000];
    int main()
    {
        cin>>n;
        for(int i = 0;i < n;i ++)
        {
            cin>>s[i];
        }
        a = n;
        while(a && a >= n / a)a --;
        a ++;
        while(n % a)a ++;
        b = n / a;
        sort(s,s + n);
        c = n - 1;
        for(int i = 0;i <= min(a,b) / 2;i ++)
        {
            for(int j = i;j < b - i;j ++)
                t[i][j] = s[c --];
            for(int j = i + 1;j < a - i;j ++)
                t[j][b - 1 - i] = s[c --];
            if(a - 1 - i != i)
            for(int j = b - i - 2;j >= i;j --)
                t[a - 1 - i][j] = s[c --];
            if(b - 1 - i != i)
            for(int j = a - i - 2;j >= i + 1;j --)
                t[j][i] = s[c --];
        }
        for(int i = 0;i < a;i ++)
        {
            cout<<t[i][0];
            for(int j = 1;j < b;j ++)
                cout<<' '<<t[i][j];
            cout<<endl;
        }
    }
  • 相关阅读:
    ORM之F和Q
    ORM查询
    Django
    jQuery基础
    DOM和BOM
    saas baas paas iaas 的理解
    分布式架构的演进过程
    tomcat 配置https 证书
    idea 学习总结
    简单数据库连接池-总结
  • 原文地址:https://www.cnblogs.com/8023spz/p/8414715.html
Copyright © 2020-2023  润新知