打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
pat1050乙螺旋矩阵

1050 螺旋矩阵 (25 分)https://pintia.cn/problem-sets/994805260223102976/problems/994805275146436608

本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。
输入格式:
输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 10
​4
​​,相邻数字以空格分隔。
输出格式:
输出螺旋矩阵。每行 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<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){return a>b;}
int main(){
   int N,m,n,t=0;
   cin>>N;
   int a[N];
   for(int i=0;i<N;i++){
    cin>>a[i];
   }
   for(n=sqrt(N);n>=1;n--){
    if(N%n==0){
        m=N/n;
        break;
    }
   }
   sort(a,a+N,cmp);
   int b[m][n];
   int level=m/2+m%2;
   for(int i=0;i<level;i++){
    for(int j=i;j<n-i&&t<N;j++){
        b[i][j]=a[t++];
    }
    for(int j=i+1;j<m-1-i&&t<N;j++){
        b[j][n-1-i]=a[t++];
    }
    for(int j=n-1-i;j>=i&&t<N;j--){
        b[m-i-1][j]=a[t++];
    }
    for(int j=m-i-2;j>i&&t<N;j--)
        b[j][i]=a[t++];
   }
   for(int i=0;i<m;i++){
     for(int j=0;j<n;j++){
        printf("%d",b[i][j]);
        if(j!=n-1)printf(" ");
    }
    printf("\n");
   }
   return 0;

}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c语言练习实例01
实验
7-5 螺旋方阵 (20分) 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
【编程练习】求正整数的位数,并逆序打印
PTA 1012 数字分类 C#
剑指offer(C++)-JZ67:把字符串转换成整数atoi(算法-模拟)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服