zoukankan      html  css  js  c++  java
  • 数字循环右移 解题报告

    数字循环右移


    题目如下:

    一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a​0 a1​​ ⋯a​n−1​​ )变换为(an−m​​ ⋯a​n−1​​ a​0​​ a​1​​ ⋯a​n−m−1​​ )(最后m个数循环移至最前面的m个位置)。

    我的思路:

    题目明确告诉我们要将每个整数循环向右移动,所以这题可以嵌套循环,逐个移动,容易理解,但效率相对低一点。使用链表可以提高效率。解决这个问题我们需要知道用户传入数据的数量n以及移动的位数m。

    方法一:

    创建一个数组保存用户传入的数据,每一次循环中先将数组的最后一个数保存到临时变量里,然后逐个右移赋值,再将临时变量赋值给第一个数组元素,进行m个循环即可。

    流程图如下:


    方法二:

    使用尾插法建立一个链表存放用户传入的数据,先连后断,先让表尾指向表头,再找到指定的位置断开并把断开后的下一个结点作为表头
    核心代码如下:(建立链表部分省略)

    其中m=m%n是为了减少重复循环,for循环是为了找到需要断开的结点。
    至于流程图,咕wo咕bu咕hui咕hua。
  • 相关阅读:
    HDU_5057_分块
    HYSBZ_2002_分块
    HDU_1166_树状数组
    HDU_5692_dfs序+线段树
    多重背包
    二进制中一的个数
    康托展开
    vector, map, queue,set常用总结
    错误票据
    高精度计算
  • 原文地址:https://www.cnblogs.com/zxc12/p/12049360.html
Copyright © 2011-2022 走看看