求问:
在函数ArrayShift()里定义b[MAXN]数组,而不是b[n],c不支持变长数组的定义。
其实根本用不到另一个数组b
这么写
void ArrayShift(int a[], int n, int m)
{
if (m == 0 || n == 1)
return;
int x = a[n - 1];
for (int i = n - 2; i <= 0; i--)
a[i + 1] = a[i];
a[0] = x;
ArrayShift(a, n, m - 1);
}
仅供参考
#include <stdio.h>
void ArrayShift(int *a, int n, int m);
int main(int argc, char *argv[])
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = 10, m;
for (int i = 0; i < n; i++)
{
if (i != 0)
printf(" ");
printf("%d", a[i]);
}
puts("");
scanf("%d", &m);
ArrayShift(a, n, m);
for (int i = 0; i < n; i++)
{
if (i != 0)
printf(" ");
printf("%d", a[i]);
}
puts("");
return 0;
}
void ArrayShift(int *a, int n, int m)
{
int b[n];
int k = m % n;
for (int i = 0, j = k; i < n - k; i++, j++)
{
b[j] = a[i];
}
for (int i = n - k, j = 0; i < n; i++, j++)
{
b[j] = a[i];
}
for (int i = 0; i < n; i++)
{
a[i] = b[i];
}
}