c代码实现,有n (n<=10) 个整数,使前面各数顺序向后移m (m<=n) 个位置,最后m个数变成最前面的m个数,如图所示。编写函数shift(a,n,m)实现上述功能在主函数中输入n个整数并输出调整后的n个数
时间: 2023-12-20 18:49:30 浏览: 66
以下是一个简单的C语言实现,通过循环移动数组元素来实现向后移动m个位置:
```c
#include <stdio.h>
void shift(int a[], int n, int m){
int i, j, temp;
for(i=0; i<m; i++){
temp = a[n-m+i];
for(j=n-m+i; j>i; j--){
a[j] = a[j-1];
}
a[i] = temp;
}
}
int main(){
int n, m, i;
printf("请输入n和m的值:");
scanf("%d%d", &n, &m);
int a[n];
printf("请输入%d个整数:", n);
for(i=0; i<n; i++){
scanf("%d", &a[i]);
}
shift(a, n, m);
printf("调整后的%d个整数为:", n);
for(i=0; i<n; i++){
printf("%d ", a[i]);
}
return 0;
}
```
注意:此代码中的数组下标从0开始。
相关问题
有 n ( n <=10)个整数,使前面各数顺序向后移 m ( m <= n )个位置,最后 m 个数变成最前面的 m 个数,如图所示。编写函数 shift ( a , n , m )实现上述功能,在主函数中输入 n 个整数并输出调整后的 n 个数。
代码如下:
```c
#include <stdio.h>
void shift(int a[], int n, int m) {
int temp[m];
for (int i = n - m; i < n; i++) {
temp[i - (n - m)] = a[i];
}
for (int i = n - m - 1; i >= 0; i--) {
a[i + m] = a[i];
}
for (int i = 0; i < m; i++) {
a[i] = temp[i];
}
}
int main() {
int n, m;
printf("请输入整数个数n和向后移动的位数m:");
scanf("%d%d", &n, &m);
int a[n];
printf("请输入%d个整数:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
shift(a, n, m);
printf("调整后的%d个整数为:", n);
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
```
测试样例:
输入:
```
请输入整数个数n和向后移动的位数m:7 3
请输入7个整数:1 2 3 4 5 6 7
```
输出:
```
调整后的7个整数为:5 6 7 1 2 3 4
```
C语言写有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数
这个问题可以通过以下步骤解决:
1. 将前面n-m个数逆序。
2. 将后面m个数逆序。
3. 将全部n个数逆序。
代码示例:
void reverse(int arr[], int start, int end){
while(start < end){
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
void shift(int arr[], int n, int m){
reverse(arr, 0, n-m-1);
reverse(arr, n-m, n-1);
reverse(arr, 0, n-1);
}
int main(){
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int m = 2;
shift(arr, n, m);
for(int i = 0; i < n; i++){
cout << arr[i] << " ";
}
return 0;
}
输出结果为:4 5 1 2 3
希望能解决您的问题。
阅读全文