段错误 | 您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起 |
存在段错误代码:
#include<stdio.h>
#define SIZE 110
void reverse(int ary[], int from, int to){
int t;
while(from < to){
t = ary[from];
ary[from] = ary[to];
ary[to] = t;
from++;
to--;
}
return;
}
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
#endif
int n, m;
while(scanf("%d %d", &n, &m) != EOF){
int i,
ary[SIZE];
for(i=0;i<n;i++){
scanf("%d", &ary[i]);
}
reverse(ary, 0, n-m-1);
reverse(ary, n-m,n-1);
reverse(ary, 0, n-1);
for(i=0;i<n-1;i++){
printf("%d ",ary[i]);
}
printf("%d\n", ary[i]);
}
return 0;
}
根据提示,可能是数组越界,正常的想法是默认了n>=m, 但是题目并没有给出,一个包含6个数的数组,就不能循环右移吗?
m>n,时,移动m次与移动m%n,的效果是相同的,所以执行m=m%n,便可使m<n。全部Case通过。
#include<stdio.h>
#define SIZE 110
void reverse(int ary[], int from, int to){
int t;
while(from < to){
t = ary[from];
ary[from] = ary[to];
ary[to] = t;
from++;
to--;
}
return;
}
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
#endif
int n, m;
while(scanf("%d %d", &n, &m) != EOF){
m=m%n;
int i,
ary[SIZE];
for(i=0;i<n;i++){
scanf("%d", &ary[i]);
}
reverse(ary, 0, n-m-1);
reverse(ary, n-m,n-1);
reverse(ary, 0, n-1);
for(i=0;i<n-1;i++){
printf("%d ",ary[i]);
}
printf("%d\n", ary[i]);
}
return 0;
}