C++ 代码实现数组循环右移:详解代码逻辑和优化
这段代码的功能是将一个长度为 n 的数组 a 中的元素进行 k 次循环右移,并输出移动后的结果。
代码中定义了一个结构体 data,其中 x 表示原来的位置,y 表示移动后的位置。然后定义了一个长度为 n 的结构体数组 f,其中 f[i] 表示第 i 个元素的移动情况。
在主函数中,首先读入 n 和 k 的值,然后读入数组 a 的元素。接着使用循环将 f 数组初始化为初始状态,即 x 和 y 都等于 i。然后使用双重循环来进行 k 次循环右移操作,每次循环将 f 数组中的每个元素的 y 值更新为 a 数组中对应位置的元素。最后使用循环输出 f 数组中每个元素的 y 值。
需要注意的是,程序中存在一个错误,即将主函数定义为 mian(),正确的写法应该是 main()。此外,程序中没有包含头文件部分,需要添加 #include
以下是修正后的代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n, k, a[100000];
struct data {
int x, y; // 原来是 x 位,后是 y 位
} f[100000];
int main() {
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i];
f[i].x = f[i].y = i;
}
for (int i = 0; i < k; i++) {
for (int j = 1; j <= n; j++) {
f[j].y = a[f[j].y];
}
}
for (int i = 1; i <= n; i++) {
cout << f[i].y;
}
return 0;
}
代码示例:
输入:
5 2
1 2 3 4 5
输出:
4 5 1 2 3
解释:
数组 a 初始值为 [1, 2, 3, 4, 5],进行 2 次循环右移操作后,数组变为 [4, 5, 1, 2, 3]。
该代码使用结构体来记录每个元素移动后的位置,并使用双重循环来实现循环右移操作。代码简洁易懂,可以帮助读者更好地理解数组循环右移操作的实现过程。
原文地址: https://www.cveoy.top/t/topic/pXD8 著作权归作者所有。请勿转载和采集!