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 }

 

posted @ 2011-10-18 14:01  笑巧  阅读(661)  评论(0编辑  收藏  举报