• 2015 HUAS Summer Training#1~C


    10935 Throwing cards away I Given is an ordered deck of n cards numbered 1 to n with card 1 at the top and card n at the bottom. The following operation is performed as long as there are at least two cards in the deck:

    Throw away the top card and move the card that is now on the top of the deck to the bottom of the deck.

    Your task is to find the sequence of discarded cards and the last, remaining card.

    Input

    Each line of input (except the last) contains a number n ≤ 50. The last line contains ‘0’ and this line should not be processed.

    Output

    For each number from the input produce two lines of output. The first line presents the sequence of discarded cards, the second line reports the last remaining card. No line will have leading or trailing spaces. See the sample for the expected format.

    Sample Input

    7

    19

    10

    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

    解题思路:首先这个循环是以0的输入为结束标志,所以在判断输入时要先看看它是不是为0.这个解题要用到队列,队列的特点是先进先出,利用front()进行数据的读取,pop()进行出队,push()进行入队,基本上就可以写出一个轮廓。注意一点的是,这个步骤要在这个队列不为空的情况下进行。还要注意题目要求的输出格式,输出第一行的最后一个数字后面没有逗号隔开,所以在每一次读取与出队之后要判断这个队列是否为空,然后再进行下一步操作。

    程序代码:
    #include<cstdio> #include<queue> #include<iostream> using namespace std; int main() { int n; while(scanf("%d",&n)==1&&n) { int x; queue<int>s; for(int i=1;i<=n;i++) s.push(i); int flag=0; printf("Discarded cards:"); while(!s.empty()) { x=s.front (); s.pop (); if(s.empty()) break; if(!flag)cout<<" "<<x; else cout<<", "<<x; flag=1; x=s.front(); s.pop(); s.push(x); } cout<<endl; printf("Remaining card:"); printf(" %d ",x); } return 0; }
  • 相关阅读:
    hdu 4333 扩展kmp
    扩展KMP
    hdu 1026 bfs+记录路径
    2015-04-26 校赛总结
    hdu 1514 记忆化搜索
    hdu 1208 记忆化搜索
    hdu 2266 dfs
    hdu 1518 dfs+剪枝
    android:layout_gravity和android:gravity的区别
    深圳市住房公积金提取办法
  • 原文地址:https://www.cnblogs.com/chenchunhui/p/4654704.html
Copyright © 2020-2023  润新知