问题描述 输入一个整数n(2<=n<=50)和整数m(1<=m<=50),再输入n个整数,要求实现n个整数循环左移m个位置。每移1位时,最左边的数移到最右边。例如5个数:1 3 5 7 9,向左移1位时,结果是3 5 7 9 1;向左移2位时,结果是5 7 9 1 3。 输入描述 共两行,第一行:整数n和整数m;第二行:n个以空格隔开的整数 输出描述 一行,循环左移后的n个整数,整数之间用一个空格隔开 样例输入 6 5 1 2 3 4 5 6 样例输出 6 1 2 3 4 5用C语言怎么编写
时间: 2023-12-03 11:47:11 浏览: 81
以下是用 C 语言实现的代码:
```c
#include <stdio.h>
void leftShift(int arr[], int n, int m) {
m %= n; // 如果 m 大于 n,则取余数
for (int i = 0; i < m; i++) {
int temp = arr[0];
for (int j = 1; j < n; j++) {
arr[j-1] = arr[j];
}
arr[n-1] = temp;
}
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
leftShift(arr, n, m);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
解释一下函数 `leftShift()` 的实现:
- 先将 m 对 n 取余数,这是因为如果 m 大于 n,循环移位其实就是多余的,因为它们是等效的。
- 循环 m 次,每次将数组最左边的数移到最右边,即将每个数向左移动一位。
- 循环结束后,数组就完成了循环移位。
在主函数中,先读入 n 和 m,然后读入 n 个整数到数组中,接着调用 `leftShift()` 函数进行循环左移操作,最后输出数组中的每个数。
阅读全文