| Time Limit: 3000MS | Memory Limit: Unknown | 64bit IO Format: %lld & %llu |
Description
Given is an ordered deck of n cards numbered 1to n with card 1 at the top and card n at thebottom. The following operation is performed aslong as there are at least two cards in the deck:Throw away the top card and movethe card that is now on the top of thedeck to the bottom of the deck.Your task is to find the sequence of discardedcards and the last, remaining card.
Input
Each line of input (except the last) contains anumber n ≤ 50. The last line contains ‘0’ andthis line should not be processed.
Output
For each number from the input produce twolines of output. The first line presents the sequenceof discarded cards, the second line reportsthe last remaining card. No line will haveleading or trailing spaces. See the sample for theexpected format.
Sample Input
7
1
9
1
0
6
0
Sample Output
Discarded cards: 1, 3, 5, 7, 4, 2
Remaining card: 6
Discarded cards: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 4, 8, 12, 16, 2, 10, 18, 14
Remaining card: 6
Discarded cards: 1, 3, 5, 7, 9, 2, 6, 10, 8
Remaining card: 4
Discarded cards: 1, 3, 5, 2, 6
Remaining card: 4
比较简单的队列模拟题;
直接模拟即可;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
using namespace std;
queue<int> q;
int main()
{
int n;
int temp;
while(scanf("%d",&n)!=EOF&&n)
{
if(n==1)
{
printf("Discarded cards:\n");
printf("Remaining card: 1\n");
continue;
}
for(int i=1;i<=n;++i)
{
q.push(i);
}
printf("Discarded cards: ");
while(q.size()>2)
{
temp=q.front();
q.pop();
printf("%d, ",temp);
temp=q.front();
q.pop();
q.push(temp);
}
temp=q.front();
q.pop();
printf("%d\n",temp);
temp=q.front();
q.pop();
printf("Remaining card: %d\n",temp);
}
return 0;
}
本文介绍了一道关于丢弃卡片的简单队列模拟题目,通过具体的输入输出样例展示了如何利用C++实现该模拟过程。该题要求从一副按顺序排列的卡片中依次丢弃顶部卡片,并将新的顶部卡片移至底部,直至剩下最后一张卡片。

3万+

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



