这道题我采用的是两个队列的方法来解决的。需要注意的地方就是输出的格式了。
题目链接:UVa 10935
AC代码:
#include <iostream>
#include <queue>
using namespace std;
queue<int> discard, remain;
int main() {
int n;
while (cin >> n && n) {
if (n == 1) {
cout << "Discarded cards:" << endl << "Remaining card: " << 1 << endl;
continue;
}
for (int i = 1; i <= n; i++)
remain.push(i);
while (remain.size() >= 2) {
discard.push(remain.front());
remain.pop();
remain.push(remain.front());
remain.pop();
}
cout << "Discarded cards: ";
int n1 = discard.size(), n2 = remain.size();
for (int i = 0; i < n1-1; i++) {
cout<< discard.front() << ", ";
discard.pop();
}
cout <<discard.front()<< endl << "Remaining card: ";
discard.pop();
for (int i = 0; i < n2-1; i++) {
cout<< remain.front() << ", ";
remain.pop();
}
cout<<remain.front()<< endl;
remain.pop();
}
return 0;
}