zoukankan      html  css  js  c++  java
  • Uva

    Problem B: 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.

    Each line of input (except the last) contains a numbern ≤ 50. The last line contains 0 and this line should not be processed. 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
    

    Output for sample input

    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

    用queue直接解决,熟练运用队列操作

    AC代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cctype>
    #include <cstring>
    #include <string>
    #include <sstream>
    #include <vector>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <stack>
    #include <queue>
    
    using namespace std;
    
    int main()
    {
    	int n;
    	while (cin >> n && n) {
    		queue<int> cards;
    		// 初始化队列
    		for (int i = 1; i <= n; i++) {
    			cards.push(i);
    		}
    		printf("Discarded cards:");
    		int first = 1;
    
    		while (cards.size() != 1) {
    			if (first) {
    				printf(" %d", cards.front());
    				first = 0;
    			}
    			else {
    				printf(", %d", cards.front());
    			}
    			cards.pop();
    			// 新的第一张牌先出队列再入队列,记得先存贮
    			int t = cards.front();
    			cards.pop();
    			cards.push(t);
    		}
    		printf("
    Remaining card: %d
    ", cards.front());
    	}
    
    	return 0;
    }



  • 相关阅读:
    (一)Kafka0.8.2官方文档中文版系列入门指南
    Hbase TTL(Time To Live)详解
    java源码学习详解Object类
    设计模式详细解读简单工厂方法模式
    (二)Kafka0.8.2官方文档中文版系列API
    Scala对象相等性判断
    scala中跳出循环的3种方法
    wpf 中借助 Grid 实现随着 Form 大小变化而按比例自动改变宽度或高度。
    static and cache
    约定编程之 Dictionary 的 String 类型的 Key
  • 原文地址:https://www.cnblogs.com/zhangyaoqi/p/4591589.html
Copyright © 2011-2022 走看看