• 算法题-翻扑克


    我手中有一堆扑克牌, 但是观众不知道它的顺序。

    1、第一步, 我从牌顶拿出一张牌, 放到桌子上。

    2、第二步, 我从牌顶再拿一张牌, 放在手上牌的底部。

    3、第三步, 重复第一步、第二步的操作, 直到我手中所有的牌都放到了桌子上。

    最后, 观众可以看到桌子上牌的顺序是:(牌底部)1,2,3,4,5,6,7,8,9,10,11,12,13(牌顶部)

    请问, 我刚开始拿在手里的牌的顺序是什么?

    解题思路:反向操作

    1. 耐心的画出如果手上的牌是1,2,3,4,5,6,7的话,到桌子上是1,3,5,7,4,2,6的过程

    2. 然后如果能构建逆向序列,则是正确的反操作

    #include <list>
    #include <iostream>
    using namespace std;
    /*
    c.push_back(num)      在末尾增加一个元素。
    c.pop_back()      删除末尾的元素。
    c.push_front(num)      在开始位置增加一个元素。
    c.pop_front()      删除第一个元素。
    */
    
    void PrintList(list<int> a1)
    {
        list<int>::iterator it;
        for(it = a1.begin();it!=a1.end();it++)
        {
             cout << *it << "	";
        }
        return;
    }
    
    list<int> getOrigin(list<int>& desk)
    {
        list<int> ret;
        if(desk.size() == 0)
            return ret;
        int tmp = desk.back();
        ret.push_front(tmp);
        desk.pop_back();
    
        if(ret.size() == 1)
        {
            tmp = desk.back();
            ret.push_front(tmp);
            desk.pop_back();
        }
    
        while(!desk.empty())
        {
            tmp = ret.back();
            ret.pop_back();
            ret.push_front(tmp);
    
            tmp = desk.back();
            ret.push_front(tmp);
            desk.pop_back();
        }
        return ret;
    }
    
    int main()
    {
        //int arr[] = {1,3,5,7,4,2,6};
        int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
        list<int> desk;
        desk.assign(arr,arr+13);
        list<int> r = getOrigin(desk);
        PrintList(r);
    }
  • 相关阅读:
    Eclipse安装aptana
    mysql获取下一篇和上一篇文章的ID
    Java回顾之Spring基础
    纯CSS实现各类气球泡泡对话框效果
    百度编辑器ueditor的简单使用
    实施接口
    Java快速教程
    Java GUI程序设计
    JAVA之关于This的用法
    Java 数组基础
  • 原文地址:https://www.cnblogs.com/LUO77/p/13602873.html
Copyright © 2020-2023  润新知