问题分析
输入:目标数组,旋转位数。
处理:将目标数组旋转指定的位数。
约束:无
解答思路
建立一个旋转 1 位的函数,这样,要旋转多少位就连续调用这个函数多少次即可。
代码实现
1 #include <iostream> 2 3 using namespace std; 4 5 // 数组旋转函数 6 void rotate(int *array, int n, int r); 7 void rotate_1(int *array, int n); 8 9 int main(void) 10 { 11 // 建立并初始化,输出测试数组。 12 int array[10]; 13 int n=10; 14 for (int i=0; i<10; i++) { 15 array[i] = i+1; 16 } 17 cout << "目标数组:" << endl; 18 for (int i=0; i<10; i++) { 19 cout << array[i] << " "; 20 } 21 cout << endl; 22 23 // 获取旋转位数 24 int r; 25 cout << "旋转位数:"; 26 cin >> r; 27 28 // 处理旋转位数 29 if (r<0) { 30 cout << "非法的旋转位数" << endl; 31 return 0; 32 } 33 else 34 r %= n; 35 36 // 调用数组旋转函数 37 rotate(array, n, r); 38 39 // 打印旋转结果 40 cout << endl << "旋转后的数组:" << endl; 41 for (int i=0; i<10; i++) { 42 cout << array[i] << " "; 43 } 44 cout << endl; 45 46 return 0; 47 } 48 49 void rotate(int *array, int n, int r) { 50 for (int i=0; i<r; i++) { 51 rotate_1(array, n); 52 } 53 } 54 55 // 旋转 1 位 56 void rotate_1(int *array, int n) { 57 int tem = array[0]; 58 59 for (int i=0; i<n-1; i++) { 60 array[i] = array[i+1]; 61 } 62 array[n-1] = tem; 63 }
运行测试
小结
很显然,这样的程序时间复杂度很差。