问题标题: 酷町堂:5363 螺旋矩阵3

0
0
已解决
蔡奕辰
蔡奕辰
高级守护
高级守护

5363   螺旋矩阵3经验值:1600

题目描述 Description

要求将一系列N个正整数按非递增顺序填充到螺旋矩阵中。从左上角的第一个元素填充螺旋矩阵,然后按顺时针螺旋方向移动。矩阵有m行n列,其中m和n满足以下条件:m×n必须等于N;m≥n;m−n是所有可能值的最小值。

输入描述 Input Description

第一行给出一个正整数N,然后下一行包含N个正整数填充到螺旋矩阵中。所有的数字范围都不超过1000,数字之间用空格隔开

输出描述 Output Description

以m行输出结果矩阵,每行包含n个数字。两个相邻的数字之间必须正好有1个空格,并且每行末尾不能有多余的空格。

样例输入 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<iostream>
#include<algorithm>
using namespace std;
int n,h,l,a[1000001],b[1001][1001]; //定义 
int minn=0x3f3f3f3f;
bool cmp(int x,int y){
    return x>y;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];//输入 
    }
    sort(a+1,a+n+1,cmp);//排序 
    for(int i=1;i<=n;i++){//找最接近的行和列 
        for(int j=1;j<=n;i++){
            if(i*j==n&&i>=j&&i-j<=minn){
                h=i;
                l=j;
                minn=i-j;
            }
        }
    }
    int t=1,ht=1,hw=h,lt=1,lw=l;
    while(t<=h*l){//用蛇形填数的方法填数 
        for(int i=ht;i<=hw;i++){
            b[i][lw]=a[t];
            t++;
        }
        lw--;
        for(int i=lw;i>=lt;i--){
            b[hw][i]=a[t];
            t++;
        }
        hw--;
        for(int i=hw;i>=ht;i--){
            b[i][lt]=a[t];
            t++;
        }
        lt++;
        for(int i=lt;i<=lw;i++){
            b[ht][i]=a[t];
            t++;
        }
        ht++;
    }
    for(int i=1;i<=h;i++){
        for(int j=1;j<=l;j++){
            cout<<b[i][j]<<" ";//输出 
        }
        cout<<endl;
    }
    return 0;
}

蔡奕辰在2020-07-20 19:30:41追加了内容

大佬们,我的代码哪错了呀!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

蔡奕辰在2020-08-22 09:07:06追加了内容

蔡奕辰在2020-08-22 09:07:36追加了内容

@张天璨


0
0
0
张恩泽
张恩泽
高级天翼
高级天翼

你这个,绝对写错了,绝对是填数部分写错的,你这好像没有填进去。

PS:你还用IDE,c++还不行?

张恩泽在2020-08-22 23:24:20追加了内容

打开QQ有惊喜,你会采纳我的

0
王子健
王子健
初级天翼
初级天翼

张天璨的网址是对的,要加头文件cstdio,因为scanf是c语言的

我要回答