题面:
有n张扑克牌,记为1 2 …… n,按照一定 的规律排放后,可以使翻开的第一张牌是 1,然后把下面一张牌放到整副牌的末尾, 再翻下一张刚好是2,再把后一张牌放到 整副牌的末尾,下面一张是3……如此继 续下去,直到最后一张牌n翻出。试编程 解决这个问题。
【输入说明】
一个正整数n( 1 <= n <= 1000 )。
【输出说明】
一行,n个空格隔开的整数,表示n张牌的 正确排列顺序。
样例输入 样例输出
5 1 5 2 4 3
【题解加代码】
#include<bits/stdc++.h> using namespace std; int m; deque <int > dq; int main() { cin>>m; //倒序放入所有牌,所以最后一张是m dq.push_front(m); //顺序操作:翻开新的头部的牌,然后将下一张放到尾部,然后翻开最上面的m //所以逆序就应该是,已经翻开了m,先把尾部的牌放到头部,然后翻开头部的m- for(int i=m-1;i>=1;i--) { dq.push_front(dq.back()); dq.pop_back(); dq.push_front(i); } for(int i=0;i<dq.size();i++) cout<<dq[i]<<" "; return 0; }