zoukankan      html  css  js  c++  java
  • 算法题-翻扑克

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

    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);
    }
  • 相关阅读:
    Chrome浏览器M53更新后超链接的dispatchEvent(evt)方法无法触发文件下载
    用es5实现模板字符串
    JS求数组最大值常用方法
    js生成随机数
    常用MouseEvent鼠标事件对象&KeyboardEvent键盘事件对象&常用键盘码
    原生js重写each方法
    indexdb开cai发keng实zhi践lu
    substring和substr的区别和使用
    前端常见面试题总结part2
    前端常见面试题总结1
  • 原文地址:https://www.cnblogs.com/LUO77/p/13602873.html
Copyright © 2011-2022 走看看