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追加了内容
@张天璨
你新手守护就想做它
你野心勃勃呀!
To tell you the truth,我也不会做!
张天璨在2020-08-03 22:43:37追加了内容
望采纳!
张天璨在2020-08-03 22:53:32追加了内容
张天璨在2020-08-03 22:55:15追加了内容

你这个,绝对写错了,绝对是填数部分写错的,你这好像没有填进去。
PS:你还用IDE,c++还不行?

张恩泽在2020-08-22 23:24:20追加了内容
打开QQ有惊喜,你会采纳我的
