本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。

输入格式:

输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 1,相邻数字以空格分隔。

输出格式:

输出螺旋矩阵。每行 n 个数字,共 m 行。相邻数字以 1 个空格分隔,行末不得有多余空格。

输入样例:

12
37 76 20 98 76 42 53 95 60 81 58 93

输出样例:

98 95 93
42 37 81
53 20 76
58 60 76
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#include <iostream>
using namespace std;
bool cmp(int i1, int i2){
return i1 > i2;
}
const int maxn = ;
int q[maxn] = { };
int res[maxn][] = { }; int main(){
int n, row, col;
scanf("%d", &n);
col = sqrt(n);
for (col; col > ; col--){
if (n%col == ){
row = n / col;
break;
}
}
for (int i = ; i < n; i++){
scanf("%d", &q[i]);
}
sort(q, q + n, cmp);
//int res[row][col]={0};
for (int i = ; i < col; i++){
res[][i] = q[i];
}
int num = col, flag = , tmp_row = , tmp_col = col - , flag_r = , flag_c = ;
while (num<n){
if (flag % == ){
for (tmp_row; tmp_row < row - flag_r; tmp_row++){
res[tmp_row][tmp_col] = q[num++];
}
flag++;
flag_r++;
tmp_col--;
tmp_row--;
}
else if (flag % == ){
for (tmp_col; tmp_col >= flag_c; tmp_col--){
res[tmp_row][tmp_col] = q[num++];
}
flag++;
flag_c++;
tmp_row--;
tmp_col++;
}
else if (flag % == ){
for (tmp_row; tmp_row >= flag_r; tmp_row--){
res[tmp_row][tmp_col] = q[num++];
}
flag++;
//flag_r++;
tmp_col++;
tmp_row++;
}
else if (flag % == ){
for (tmp_col; tmp_col < col - flag_c; tmp_col++){
res[tmp_row][tmp_col] = q[num++];
}
flag++;
//flag_c++;
tmp_row++;
tmp_col--;
}
}
for (int i = ; i < row; i++){
for (int j = ; j < col; j++){
printf("%d", res[i][j]);
if (j != col - )printf(" ");
}
printf("\n");
}
system("pause");
}

注意点:这道题没有什么取巧的方法,就把螺旋矩阵一个个赋值过来。但这里面的一个问题让我百思不得其解,c和c++创建数组时的大小不是必须要是常量吗,为什么可以用变量去创建,在我的vs2013上是报错的,直接在pintia上提交就没问题,是后面哪个c++标准改了吗。vs2017里也不行

PS:error C2057:应输入常量表达式

PAT B1050 螺旋矩阵 (25 分)的更多相关文章

  1. PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 目录 PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) ...

  2. PAT 1050 螺旋矩阵(25)(代码)

    1050 螺旋矩阵(25)(25 分) 本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方 ...

  3. PAT Basic 1050 螺旋矩阵 (25 分)

    本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N:m ...

  4. 1050 螺旋矩阵 (25 分)C语言

    本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 ...

  5. PAT 1050. 螺旋矩阵(25)

    本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...

  6. PAT-乙级-1050. 螺旋矩阵(25)

    1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...

  7. PTA PAT排名汇总(25 分)

    PAT排名汇总(25 分) 计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,科 ...

  8. 1050. 螺旋矩阵(25) pat乙级题

    本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m- ...

  9. 【算法笔记】B1050 螺旋矩阵

    1050 螺旋矩阵 (25 分)   本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行  ...

随机推荐

  1. 一些减少代码量、提高开发效率的利器(Java)

    Spring Boot mybatis-plus代码生成器和自带CRUD接口 lombok 库: Apache Commons & guava AOP Java8: stream & ...

  2. 【CDQ分治】[HNOI2010]城市建设

    题目链接 线段树分治+LCT只有80 然后就有了CDQ分治的做法 把不可能在生成树里的扔到后面 把一定在生成树里的扔到并查集里存起来 分治到l=r,修改边权,跑个kruskal就行了 由于要支持撤销, ...

  3. Spring AOP 中@Pointcut的用法

    Spring Aop中@pointCut的用法,格式:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? nam ...

  4. html基础标签下

    1.1 单标签 ◆注释标签   ctrl+/ ◆水平线标签   <hr> ◆换行标签   <br> 1.2 双标签 ◆段落标签    <p></p> ◆ ...

  5. 页面可见性判断:document.hidden与visibilitychange事件

    我们需要在特定的时候判断页面的显示状态,例如:当视频加载到可播放状态时,根据用户是否停留在当前页面来决定是否开始自动播放.页面的展示的状态的判断就需要用到html5新增的一个api:document. ...

  6. 解决VB6.0中不能加载MSCOMCTL.OCX的错误提示

    VB6.0毕竟是很古老的开发工具了,其对所使用的第三方组件依赖性比较强,例如在打开从其它电脑上拿来的VB6.0的软件(系统)的工程文件(源代码)时,经常会遇到"不能加载MSCOMCTL.OC ...

  7. 解决Hsqldb指针只能单向移动,不能回滚问题(.first())

    Class.forName("org.hsqldb.jdbcDriver").newInstance(); Connection con = java.sql.DriverMana ...

  8. 异常System.BadImageFormatException

    [问题描述] Server Error in '/' Application. Could not load file or assembly 'WebDemo' or one of its depe ...

  9. NIO 学习笔记

    0. 介绍 参考   关于Java IO与NIO知识都在这里   ,在其基础上进行修改与补充. 1. NIO介绍 1.1 NIO 是什么 Java NIO 是 java 1.4, 之后新出的一套IO接 ...

  10. Go语言学习笔记(六)net & net/http

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 net import "net" net包提供了可移植的网络I/O接口,包括TCP/IP.UD ...