数组声声明在函数内部,属于局部变量,存放在了栈上,如果数组过大比如a[1000000]。那数组占用的内存大小为:1000000*4byte约等于4M。而栈的默认内存空间为1M左右,所以会导致内存溢出解决这个问题。
编译不会报错,赋值也没有错,但是整个赋值结束成P天)
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int A[10010][10010];
bool cmp(int a,int b){
return a>b;
}
int main(){
int n,s[10010];
cin>>n;
for(int i=0;i<n;i++)
cin>>s[i];
sort(s,s+n,cmp);
int sum=0,i=0,j=0;
int N=n;
int m=(int)ceil(sqrt(N));
while(N%m!=0)
m++;
n=N/m;
int left=0,right=n-1,up=0,down=m-1;
while(sum<N){
i=left;
j=up;
if(sum==N-1){
A[i][j]=s[sum++];
break;
}
while(sum<N&&j<right){
A[i][j]=s[sum++];
j++;
}
while(sum<N&&i<down){
A[i][j]=s[sum++];
i++;
}
while(sum<N&&j>left){
A[i][j]=s[sum++];
j--;
}
while(sum<N&&i>up){
A[i][j]=s[sum++];
i--;
}
left++;
right--;
up++;
down--;
}
for(int a=0;a<m;a++){
for(int b=0;b<n;b++){
cout<<A[a][b];
if(b!=n-1)
cout<<" ";
}
cout<<endl;
}
return 0;
}