#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 i; int b[n]; for(i=0;i<n;i++) b[i]=a[i]; for(i=m;i<n;i++) a[i]=b[i-m]; for(i=0;i<m;i++) a[i]=b[n-m+i]; }本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)(最后m个数循环移至最前面的m个位置)。
时间: 2024-03-23 15:38:53 浏览: 247
字符串函数string.h应用举例.-综合文档
这段代码实现了一个对数组进行循环右移的函数ArrayShift,其具体实现原理如下:
1. 首先创建一个和原数组大小相同的临时数组b,用于存储原数组a中的所有元素。
2. 然后将数组a中的后m个元素(即a[n-m]到a[n-1])存放到数组a的前m个位置(即a[0]到a[m-1])中。
3. 最后将数组a中的前n-m个元素(即a[0]到a[n-m-1])存放到数组a中的第m个位置到第n-1个位置(即a[m]到a[n-1])中。
具体实现代码如下:
```
void ArrayShift(int a[], int n, int m) {
int i;
int b[n];
for(i=0;i<n;i++)
b[i]=a[i];
for(i=m;i<n;i++)
a[i]=b[i-m];
for(i=0;i<m;i++)
a[i]=b[n-m+i];
}
```
阅读全文