n个数据后移k位(队列的应用)
题目:数组中有 n 个数据,要将它们顺序循环向后移 k 位,即前面的元素向后移k位,后面的元素则循环向前移k位,例:0,1,2,3,4 循环移3位后为2,3,4,0,1。
解题思路:这道题解题方法有很多,后移让我想到了队列,因为是先进先出,n 个数据后移 k 位就可以当成前 n-k 个数据依次出队后又依次入队,从队头出进入队尾。然后再依次输出队列中的元素即为最终移后各元素的位置。因此可以运用队列来解这道题。注意:当k>n时,应先进行取摸运算k=k%n,也是一个简化过程。代码如下:
View Code
1 #include<iostream>
2 #include<queue>
3 using namespace std;
4 queue <int> q;
5 int main()
6 {
7 int n,k,i,an[101],m;
8 while(cin>>n>>k)
9 {
10 for(i=0;i<n;i++)
11 {
12 cin>>an[i];
13 q.push(an[i]);
14 }
15 for(i=1;i<=(n-k)%n;i++)
16 {
17 m=q.front();//获取队首元素
18 q.pop();//队首元素出队
19 q.push(m);//元素 m 入队
20 }
21 while(!q.empty())//输出队中各元素
22 {
23 cout<<q.front()<<" ";
24 q.pop();
25 }
26 cout<<endl;
27 }
28 return 0;
29 }
2 #include<queue>
3 using namespace std;
4 queue <int> q;
5 int main()
6 {
7 int n,k,i,an[101],m;
8 while(cin>>n>>k)
9 {
10 for(i=0;i<n;i++)
11 {
12 cin>>an[i];
13 q.push(an[i]);
14 }
15 for(i=1;i<=(n-k)%n;i++)
16 {
17 m=q.front();//获取队首元素
18 q.pop();//队首元素出队
19 q.push(m);//元素 m 入队
20 }
21 while(!q.empty())//输出队中各元素
22 {
23 cout<<q.front()<<" ";
24 q.pop();
25 }
26 cout<<endl;
27 }
28 return 0;
29 }