题目大意:对列的经典问题,洗牌,先把一个牌取出,然后把下一张放在最后。
思路:用STL的队列就可以了,每次循环出队两次,第一次的值输出,第二次的值入队。直到最后一个值,输出即可。
#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int t;
while(cin>>t,t){
queue<int> q;
for(int i=1;i<=t;i++){
q.push(i);
}
cout<<"Discarded cards:";
while(q.size()>=2){
if(q.size()==2) cout<<" "<<q.front();
else
cout<<" "<<q.front()<<",";
q.pop();
q.push(q.front());
q.pop();
}
cout<<endl;
cout<<"Remaining card: ";
cout<<q.front();
cout<<endl;
}
return 0;
}
本文介绍了一种使用标准模板库(STL)中的队列解决经典洗牌问题的方法。通过不断移除队首元素并将下一个元素重新插入队尾的方式,实现了洗牌过程的模拟,并最终输出剩余的牌。
611

被折叠的 条评论
为什么被折叠?



