c++实现一维数组的循环位移
时间: 2023-11-30 21:04:05 浏览: 48
对于C++实现一维数组的循环位移,可以通过以下代码实现:
```c++
#include <iostream>
using namespace std;
void rotate(int arr[], int n, int k) {
k = k % n; // 防止k大于n
for (int i = 0; i < k; i++) {
int temp = arr[0];
for (int j = 0; j < n - 1; j++) {
arr[j] = arr[j + 1];
}
arr[n - 1] = temp;
}
}
int main() {
int n, k;
cin >> n >> k;
int arr[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
rotate(arr, n, k);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
```
其中,rotate函数实现了数组的循环位移,n表示数组长度,k表示要移动的位数,arr为要移动的数组。在主函数中,先输入数组长度n和要移动的位数k,再输入数组的值,最后调用rotate函数进行数组的循环位移,并输出移动后的数组。
相关问题
C++二维数组变一维数组
要将C++二维数组转换为一维数组,可以使用简单的循环来实现。以下是一个示例代码:
```cpp
#include <iostream>
const int ROWS = 3;
const int COLS = 4;
void convert2DTo1D(int arr2D[ROWS][COLS], int arr1D[], int rows, int cols) {
int k = 0;
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
arr1D[k++] = arr2D[i][j];
}
}
}
int main() {
int arr2D[ROWS][COLS] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
int arr1D[ROWS * COLS];
convert2DTo1D(arr2D, arr1D, ROWS, COLS);
// 输出一维数组
for (int i = 0; i < ROWS * COLS; ++i) {
std::cout << arr1D[i] << " ";
}
return 0;
}
```
此示例中,`convert2DTo1D` 函数将二维数组 `arr2D` 转换为一维数组 `arr1D`。通过嵌套循环,将二维数组的每个元素按顺序复制到一维数组中。然后在 `main` 函数中,创建了一个大小为 `ROWS * COLS` 的一维数组 `arr1D`,并将转换后的结果存储在其中。最后,通过循环打印一维数组的内容。
请注意,这里的一维数组是按照行优先的顺序进行填充的。如果你想按列优先填充,只需将内层循环和外层循环的顺序交换即可。
c++求一维数组的所有峰值
一维数组的峰值是指数组中比左右相邻元素都要大的元素。假设给定一个一维数组arr,我们可以通过遍历数组的每一个元素,判断其是否为峰值。
具体的算法如下:
1. 遍历数组arr的所有元素,从索引1开始,到索引arr.length-2结束。
2. 判断当前元素arr[i]是否比其左右相邻元素arr[i-1]和arr[i+1]都要大。若是,则将该元素加入到峰值数组中。
3. 返回峰值数组作为结果。
代码实现如下:
```python
def find_peaks(arr):
peaks = []
for i in range(1, len(arr)-1):
if arr[i] > arr[i-1] and arr[i] > arr[i+1]:
peaks.append(arr[i])
return peaks
# 测试示例
arr = [1, 2, 3, 4, 3, 2, 1]
peaks = find_peaks(arr)
print(peaks) # 输出 [4]
```
以上代码中,我们首先定义了一个函数find_peaks来实现寻找一维数组的峰值。然后,我们通过遍历数组并判断每个元素是否为峰值,将满足条件的元素添加到peaks数组中。最后,返回peaks数组作为结果。
以上是一种简单的寻找一维数组峰值的方法。对于一个长度为n的数组,时间复杂度为O(n),空间复杂度为O(1)。