• 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 nsatisfy the following: m×n must be equal to N; mn; and mn 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 1. 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<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int maxn = 10010; //数字不能太大 
    int matrix[maxn][maxn],A[maxn];
    
    bool cmp(int a,int b){
        return a > b;
    }
    
    int main(){
        int N;
        scanf("%d",&N);
        for(int i = 0; i < N; i++){
            scanf("%d",&A[i]);
        }
        if(N == 1){
            printf("%d",A[0]);
            return 0;
        }
        sort(A,A+N,cmp);
        int m = (int)ceil(sqrt(1.0*N));
        while(N % m != 0) m++;  //除不整的时候m++ 
        int n = N / m, i = 1, j = 1, now = 0;
        int U = 1, D = m, L = 1, R = n;
        while(now < N){
            while(now < N && j < R){
                matrix[i][j] = A[now++];
                j++;
            }
            while(now < N && i < D){
                matrix[i][j] = A[now++];
                i++;
            }
            while(now < N && j > L){
                matrix[i][j] = A[now++];
                j--;
            }
            while(now < N && i > U){
                matrix[i][j] = A[now++];
                i--;
            }
            U++,D--,L++,R--;
            i++,j++;
            if(now == N - 1){
                matrix[i][j] = A[now++];
            }
        }
        for(int i = 1; i <= m; i++){
            for(int j = 1; j <= n; j++){
                printf("%d",matrix[i][j]);
                if(j < n) printf(" "); //j < n,不是j < n - 1 
                else printf("
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    rpm 命令|rpm 安装|rpm 卸载|rpm 使用|rpm 删除
    Linux中如何开启8080端口供外界访问 和开启允许对外访问的端口8000
    git远程提交到github或者gitee
    git搭建私有仓库
    Linux命令行设置环境变量
    【Little_things】控制台五子棋(java)
    【cisco实验】练习 2.3.8: 配置基本交换机管理
    操作系统FCFS,SJF进程调度(C++)
    JavaBean的编译和部署说明
    【Python爬虫】爬取个人博客的图片
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/9574335.html
Copyright © 2020-2023  润新知