1105 Spiral Matrix(32行代码+详细注释)

news/2024/10/30 13:48:43/

分数 25

全屏浏览题目

切换布局

作者 CHEN, Yue

单位 浙江大学

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

代码长度限制

16 KB

时间限制

200 ms

内存限制

64 MB

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    int r,c,a[n];
    for(int i=0;i<n;i++)cin>>a[i];
    sort(a,a+n,greater<int>());//从大到小排序 
    for(int i=1;i<=n/i;i++){//获得符合条件的行和列 
        if(n%i==0){
            r=n/i;
            c=i;
        }
    }
    int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};//分别对应右,下,左,上 
    vector<vector<int>>res(r,vector<int>(c));//二维动态数组 
    for(int i=0,x=0,y=0,d=0;i<n;i++){//x,y代表每次的下标,i是数组里的第i个数字的下标,d代表方向 
        res[x][y]=a[i];//每次先赋值 
        int tx=x+dx[d],ty=y+dy[d];//获取当前下标的下一个下标 
        if(tx<0||tx>r-1||ty<0||ty>c-1||res[tx][ty]){//若下一个下标不合法 
            d=(d+1)%4;//换个方向 
            tx=x+dx[d],ty=y+dy[d];//重新获取下标 
        }
        x=tx,y=ty;//获取下一个下标 
    }
    for(int i=0;i<r;i++){//输出 
        cout<<res[i][0];
        for(int j=1;j<c;j++)cout<<' '<<res[i][j];
        cout<<endl;
    }
    return 0;
}


http://www.ppmy.cn/news/97638.html

相关文章

关于强电与弱的的介绍

强电&#xff1f;弱电&#xff1f;傻傻分不清楚&#xff0c;今天海翎光电的小编为大家系统的介绍一下强电与弱电。 什么是强电&#xff1f; &#xff08;1&#xff09;供配电系统&#xff1a;供配电系统包括负荷分级、供电措施、负荷力矩、电网谐波限值、用电指标、负荷所需要…

RNN Seq2Seq

Feedforward v.s. Recurrent Feedforward network does not have input at each stepFeedforward network has different parameters for each layer 双向RNN 双向递归层可以提供更好的识别预测效果&#xff0c;但却不能实时预测&#xff0c;由于反向递归的计算需要从最末时刻…

【Servlet】

目录 &#x1f382;1. 第一个 Servlet 程序&#xff1a;使用 Servlet 写 hello world &#x1f95e;1.1 创建项目 &#x1f373;1.2 引入依赖 &#x1f383;1.3 创建目录 &#x1f358;1.4 开始写代码 &#x1f30d;1.5 打包代码 &#x1f364;1.6 部署 &#x1f451;1…

《C++程序设计原理与实践》笔记 第18章 向量和数组

本章将介绍如何拷贝以及通过下标访问向量。为此&#xff0c;我们讨论一般的拷贝技术&#xff0c;并考虑向量与底层数组表示之间的关系。我们将展示数组与指针的关系及其使用引发的问题。我们还将讨论对于每种类型必须考虑的五种基本操作&#xff1a;构造、默认构造、拷贝构造、…

python--杂识--9--subprocess.Popen()各参数含义

subprocess.Popen() 是一个非常有用的 Python 模块&#xff0c;它可以在当前进程内或者在子进程中运行系统命令&#xff0c;并能够查看返回结果。它的一般语法如下&#xff1a; subprocess.Popen(args, bufsize-1, executableNone, stdinNone, stdoutNone,stderrNone, preexec…

rust初级概念及部分操作

文章目录 1、变量与可变性2、数据类型2.1、标量类型2.2、复合类型 3、函数4、控制流4.1、if else4.2、循环 5、所有权5.1、stack与heap5.2、所有权规则5.3、内存与分配5.4、所有权与函数5.5、引用和借用5.6、切片 6、struct7、枚举与匹配7.1、枚举7.2、match 8、package、crate…

漫游计算机系统

1.信息就是位 上下文 那么什么是信息呢&#xff1f; 在计算机系统中&#xff0c;所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据。本质上是一串比特位。 那么又要了解什么是比特了&#xff0c;比特&#xff08;bit)就是二进制&#xff…

面试题 01.01. 判定字符是否唯一

判定字符是否唯一 实现一个算法&#xff0c;确定一个字符串 s s s 的所有字符是否全都不同。 示例 1&#xff1a; 输入: s “leetcode” 输出: false 示例 2&#xff1a; 输入: s “abc” 输出: true 限制&#xff1a; 0 < len(s) < 100 s[i]仅包含小写字母 如果…