首页 > 代码库 > 编程之美--2.17

编程之美--2.17

题目描述:数组循环移动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 }