题目描述:数组循环移动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 }
原文地址:http://www.cnblogs.com/cane/p/3797831.html