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);
    }
  • 相关阅读:
    .NET框架程序设计三个概念:.NET,.NET平台(PlatForm),.NET框架(Framework)
    解决AVI格式的文件不能删除的问题
    加载项目失败的解决办法
    由Codebehind所引发的
    由Duwamish学习web.config的配置
    JDK、JRE、JVM之间的关系
    hadoop等的下载地址
    eclipse代码自动补全
    UML 类图中的几种关系
    fedora 14 的163的yum源
  • 原文地址:https://www.cnblogs.com/LUO77/p/13602873.html
Copyright © 2011-2022 走看看