Ponytai1 2016-10-24 04:42 采纳率: 25%
浏览 1377

算法:数组循环移动问题

有n个元素,右移k位,一种数组循环右移的方法是:1 2 3 4 5 6 ,移2位,将1移到3,3移到5,5移到1,结束。移2到4,4到6,6到2,结束。 一共2组,2正好就是2 ,6 的最大公约数。

即每个元素m移到(m+k) % n的位置上,而(m+k)%n移到(m+2k)%n的位置上……
当n与k互质时,可以证明m, m+k, m+2k, ..., m + (n-1)k模n的结果互不相等,刚好构成一个循环;否则,会构成(n,k)(n与k的最大公约数)个循环。分别处理这(n,k)个循环就可以得到结果。

这个公约数怎么来的啊,为什么正好是(n k) 最大公约数个循环呀。。?怎么想到的?

  • 写回答

1条回答 默认 最新

  • 蓝月心语 2016-10-24 05:11
    关注

    这个思想好奇怪啊,为什么要这么移动呢?往右边移动k位,我的想法是把右边k个数逆序,把剩余数逆序,把所有数逆序;得到结果

    评论

报告相同问题?

悬赏问题

  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决