zoukankan      html  css  js  c++  java
  • 扑克牌的游戏

    扑克牌的游戏

             手中有13张扑克牌,分别是1、2、3、4、5、6、7、8、9、10、J、Q、K,这里我们相求一种顺序,使得:每次将牌盖住,将最上面的牌放在最下面,再将最上面的牌扔出,使得扔出去的牌的顺序依次为:1、2、3、4、5、6、7、8、9、10、J、Q、K。

             我们首先给出程序的模拟操作,初始时的顺序依次为:1、2、3、4、5、6、7、8、9、10、J、Q、K。

             从初始顺序到结果顺序的过程为:先把初始顺序中的第一个元素放到最下面,然后将之后初始顺序中第一个元素抽出来,放入到结果顺序中。在我们的模拟程序中,用vector保存初始顺序和结果顺序,首先检测初始顺序序列是否为空,如果不为空,则首先将vector中最前的元素放到最后面,然后将vector中最前的元素抽取出来放入到结果顺序中最后面。依次循环,直至初始顺序为空。

             通过对操作的模拟,我们可以根据初始顺序序列得到结果顺序序列。

             另一个问题是,如果知道结果顺序序列,如何得到初始顺序序列。其实,这是一个相逆的过程。具体如下,首先,我们将结果顺序序列中的最后一个元素取出来,并从结果顺序序列中去除,将该元素加入到顺序序列的顶端,然后将初始顺序序列中的最后一个元素调整到最前面的位置,依次循环,直至结果顺序序列为空,最终得到结果顺序序列对应的初始顺序序列。

             初始顺序到结果顺序以及结果顺序到初始顺序的模拟程序如下:

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    void display(const vector<string>& src)
    {
        for (auto i = 0; i != src.size(); ++i)
        {
            cout << src[i] << ' ';
        }
        cout << endl;
    }
    
    // 从初始顺序到结果顺序
    void play(const vector<string>& src, vector<string>& des)
    {
        des.clear();
        vector<string> src_tmp(src);
    
        display(src_tmp);
        display(des);
        cout << endl;
        while (!src_tmp.empty())
        {
            string tmp = *src_tmp.begin();   // 取初始顺序中的第一个元素
            src_tmp.erase(src_tmp.begin());  // 将初始顺序中第一个元素删除
            src_tmp.push_back(tmp);          // 将原第一个元素放到最后面
            tmp = *src_tmp.begin();          // 取修改后的第一个元素
            src_tmp.erase(src_tmp.begin());  // 将修改后的第一个元素删除
            des.push_back(tmp);              // 将修改后的第一个元素添加到结果顺序的末尾
    
            display(src_tmp);
            display(des);
            cout << endl;
        }
    }
    
    // 从结果顺序到初始顺序
    void play_reverse(const vector<string>& des, vector<string>& src)
    {
        src.clear();
        vector<string> des_tmp(des);
    
        display(des_tmp);
        display(src);
        cout << endl;
        while (!des_tmp.empty())
        {
            string tmp = *(des_tmp.end() - 1); // 取结果顺序末尾的一个元素
            des_tmp.erase(des_tmp.end() - 1);  // 将结果顺序末尾元素删除
            src.insert(src.begin(), tmp);      // 将该元素添加到初始顺序开头
            tmp = *(src.end() - 1);            // 去初始顺序最后一个元素
            src.erase(src.end() - 1);          // 将初始顺序中最后一个元素删除
            src.insert(src.begin(), tmp);      // 将该元素添加到初始顺序的最前头
    
            display(des_tmp);
            display(src);
            cout << endl;
        }
    }
    
    int main()
    {
        //string strs[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        // string strs[] = {"2", "4", "6", "8", "10", "Q", "1", "5", "9", "K", "7", "3", "J"};
         string strs[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17"};
        vector<string> src(strs, strs + sizeof (strs) / sizeof (*strs));
        vector<string> des;
        play(src, des);
    
        cout << endl;
    
        des.clear();
        des.assign(strs, strs + sizeof (strs) / sizeof (*strs));
        play_reverse(des, src);
    
        cout << endl;
    
    
        play(src, des);
        cout << endl;
    
        return 0;
    }

  • 相关阅读:
    Vs2010程序和数据库打包成安装文件
    转——C# DataGridView控件 动态添加新行
    c# WinForm开发 DataGridView控件的各种操作
    转——使用PowerDesigner画ER图
    C#画图
    DataGridView 取得当前单元格的内容实现模糊查找
    DataGridView 取得或者修改当前单元格的内容
    c# 做了个Form,上面有个Button,如何在Form加载好之后,用代码触发这个Button的Click事件
    一次ORACLE连接报错
    再次学习Django,实现sql的页面显示及条件查询
  • 原文地址:https://www.cnblogs.com/unixfy/p/3285368.html
Copyright © 2011-2022 走看看