m0_74368516 2022-10-30 21:44 采纳率: 75%
浏览 236

数组循环右移PTA问题

本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置
#include <stdio.h>
#define MAXN 10

void ArrayShift( int a[], int n, int m );

int main()
{
int a[MAXN], n, m;
int i;

scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);

ArrayShift(a, n, m);

for ( i = 0; i < n; i++ ) {
    if (i != 0) printf(" ");
    printf("%d", a[i]);
}
printf("\n");

return 0;

}

/* 你的代码将被嵌在这里 */
void ArrayShift( int a[], int n, int m ){
int b[m],i,c;
for(i=1;i<=m;i++){
b[i]=a[n-m+i];
}
for(c=1;c<=n-m;c++){
a[n-m+c]=a[c];
}
for(i=1;i<=m;i++){
a[i]=b[i];
}
}
输出结果乱码

  • 写回答

1条回答 默认 最新

  • X-道至简 2022-10-30 22:25
    关注

    for(i=1;i<=m;i++){
    b[i]=a[n-m+i];
    第一个就越界了 当i=m, n-m+i = n, 访问a[n]了,越界,应该i从0开始吧
    下面的类似的方式在检查一下看看

    评论

报告相同问题?

问题事件

  • 创建了问题 10月30日