• 第 2 章 第 3 题 数组旋转问题 平移算法实现2


    问题分析

      输入:目标数组,旋转位数。

      处理:将目标数组旋转指定的位数。

      约束:无

    解答思路

      建立一个旋转 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 }

    运行测试

      

    小结

      很显然,这样的程序时间复杂度很差

  • 相关阅读:
    2012年春晚剧本
    研究机器人
    85.圆角边框的两大要素 Walker
    81.边框设置 Walker
    76.背景固定 Walker
    84.边框方向 Walker
    86.圆角边框设置 Walker
    82.边框宽度和边框颜色 Walker
    88.轮廓和样式重置 Walker
    77.背景简写 Walker
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3629391.html
Copyright © 2020-2023  润新知