-
-
[旧帖]
[求助]c语言段错误找不到原因
0.00雪花
-
发表于:
2015-12-23 21:46
1785
-
[旧帖] [求助]c语言段错误找不到原因
0.00雪花
在做编程题时遇到的一个问题,测试数据都能通过。最后一个段错误不知道什么原因,百度说是数组越界什么的,弄了好久也没解决。下面是截图
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int phase(int N);
int main(void){
//a保存输入的序列,b保存输出矩阵
int a[10001],b[101][101];
int flag,N,n,m,i,j,count=0,temp,c;
scanf("%d",&N);
//输入N个数
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
//降序排序
for(i=0;i<=N-2;i++){
for(j=N-1;j>=1;j--){
if(a[j]>a[j-1]){
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
//m和n的差值
flag = phase(N);
for(i=1;i<=N;i++){
if(i*(i+flag)==N){
break;
}
}
//获得行和列的值
n = i;
m = i+flag;
//开始循环
i = 0;
j = 0;
c = 0;
N = 0;
//只有一列特殊处理
if(n==1){
for(i=0;i<m;i++)
for(j=0;j<n;j++)
b[i][j] = a[c++];
}else{
do{
while(j<(n-count)){
b[i][j] = a[N++];
j++;
}
if(N==m*n)
break;
j--;
i++;
while(i<(m-count)){
b[i][j] = a[N];
i++;
N++;
}
if(N==m*n)
break;
i--;
j--;
while(j>=count){
b[i][j] = a[N];
j--;
N++;
}
if(N==m*n)
break;
j++;
i--;
count++;
while(i>=count){
b[i][j] = a[N];
i--;
N++;
}
if(N==m*n)
break;
j++;
i++;
}while(1);
}
//打印输出
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(j<n-1){
printf("%d ",b[i][j]);
}else{
printf("%d\n",b[i][j]);
}
}
}
return 0;
}
//获得m,n差值
int phase(int N){
int min,i,n,m;
min = N;
for(i=1;i<=N; i++){
n=i;
m=N/n;
if(n*m==N){
min = min<abs(m-n)?min:abs(m-n);
}
}
return min;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)