题目描述:数组循环移动K位

分析:这道题和之前碰到的字符串循环移位其实是一个思路的,编程珠玑上面也讲了这道题。

(1)第一种方法是对数组划分成两个部分,对两部分进行反转,同时对整个数组进行反转

(2)第二种方法是将第i位的元素和(i+k)%N的元素交换,从第0个元素开始,循环直到回到第0个元素。

 1 #include <iostream>
 2 #include <queue>
 3 #include <climits>
 4 #include <algorithm>
 5 #include <memory.h>
 6 #include <stdio.h>
 7 #include <ostream>
 8 #include <vector>
 9 #include <list>
10 #include <cmath>
11 #include <string>
12 #include <stdexcept>
13 #include <stack>
14 using namespace std;
15 
16 void fun(string s,int k)
17 {
18     k = k%s.length();
19     int t = 0;
20     char c = s[t];
21     bool flag = true;
22     while(flag)
23     {
24         char tmp = s[(t+k)%s.length()];
25         s[(t+k)%s.length()] = c;
26         t = (t+k)%s.length();
27         if(t == 0)
28         {
29             flag = false;
30             s[t] = c;
31         }
32         c = tmp;
33     }
34     cout<<s<<endl;
35 }
36 
37 int main()
38 {
39     string s("abcd");
40     fun(s,1);
41     return 0;
42 }