c语言循环左移不用数组
时间: 2024-03-22 18:33:36 浏览: 15
以下是C语言实现循环左移不用数组的代码:
```c
#include <stdio.h>
// 翻转数组中指定区间的元素
void reverse(int* nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
// 循环左移
void left_rotate(int* nums, int n, int k) {
k %= n; // 取模,保证k小于n
reverse(nums, 0, k - 1); // 翻转前k个数
reverse(nums, k, n - 1); // 翻转剩下的n-k个数
reverse(nums, 0, n - 1); // 翻转整个数组
}
int main() {
int nums[] = {1, 2, 3, 4, 5};
int n = sizeof(nums) / sizeof(int);
int k = 2;
left_rotate(nums, n, k);
for (int i = 0; i < n; i++) {
printf("%d ", nums[i]);
}
return 0;
}
```
相关问题
数组循环左移c语言pta
可以使用以下代码实现数组循环左移:
```c
#include <stdio.h>
void leftShift(int arr[], int n, int k) {
k %= n; // 处理 k 大于 n 的情况
for (int i = 0; i < n; i++) {
printf("%d ", arr[(i + k) % n]);
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int k = 2;
leftShift(arr, n, k);
return 0;
}
```
输出结果为:3 4 5 1 2
C语言中有int数组a[10],现在让a[10]循环左移b位怎么写
对于整型数组a[10],循环左移b位可以先将a[0]至a[b-1]的元素存储在一个临时数组中,然后将a[b]至a[9]的元素依次向前移动b位,最后将临时数组中的元素依次存储到a[10-b]至a[9]的位置。具体实现代码如下:
```c
void rotate_left(int a[], int len, int b) {
int temp[b];
for (int i = 0; i < b; i++) {
temp[i] = a[i];
}
for (int i = b; i < len; i++) {
a[i - b] = a[i];
}
for (int i = 0; i < b; i++) {
a[len - b + i] = temp[i];
}
}
```
其中,a[]表示待左移的数组,len表示a[]的长度,b表示左移的位数。在函数实现中,首先定义一个长度为b的临时数组temp,将a[0]至a[b-1]的元素存储到temp中。然后,从a[b]开始,将a[b]至a[9]的元素依次向前移动b位,即将a[i]赋值给a[i-b]。最后,将临时数组temp中的元素依次存储到a[10-b]至a[9]的位置,即将temp[i]赋值给a[len-b+i]。