前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >联想算法题-发牌序列

联想算法题-发牌序列

作者头像
GeekLiHua
发布2025-01-21 15:08:34
发布2025-01-21 15:08:34
8500
代码可运行
举报
文章被收录于专栏:Java
运行总次数:0
代码可运行

联想算法题-发牌序列

问题描述 小A和小B在玩纸牌。每张牌上都有一个点数,所有的牌都背面朝上叠放成一个牌堆,现在他们在研究如何发牌。 他们研究出的发牌策略如下:小A每次将牌堆顶的那一张牌发出,每次发牌前,小B都会进行一次切牌,假设目前牌堆中有n张牌,那么小B会将前⌊n/3⌋张牌从牌堆顶依次放到牌堆底(⌊x⌋表示将x向下取整)。现在给你初始的牌堆中从顶到底每张牌的点数,请问按照上述发牌策略,最终得到的发牌序列是怎样的? 例如初始牌堆为[4, 5, 2, 3, 1, 2](从左往右分别是牌堆中从顶到底每张牌的点数),首先小B将前⌊6/3⌋=2张牌放到牌堆底部,牌堆变为[2, 3, 1, 2, 4, 5],然后小A将牌堆顶的2发出,牌堆变为[3, 1, 2, 4, 5]。小B再将前⌊5/3⌋=1张牌放到牌堆底部,牌堆变为[1, 2, 4, 5, 3],然后小A及那个牌堆顶的1发出,牌堆变为[2, 4, 5, 3]……按照发牌策略继续操作后,可以得到最终的发牌序列是[2, 1, 4, 3, 2, 5]

输入描述 第一行是一个正整数n,表示初始牌堆中有n张牌。 第二行是n个正整数a_1, a_2, …, a_n,第i个数a_i表示牌堆从顶向底第i张牌的点数。

输出描述 一行n个用空格隔开的正整数b_1, b_2, …, b_n,其中b_i表示第i次发出的牌的点数。

输入样例1 6 4 5 2 3 1 2

输出样例1 2 1 4 3 2 5

数据范围和说明 30%的数据保证:1<=n<=10, 1<=a_i<=1000 80%的数据保证:1<=n<=100, 1<=a_i<=1000 100%的数据保证 :1<=n<=1000, 1<=a_i<=1000

算法思路: 这个题的思路是模拟,通过双端队列模拟这个过程,难度不是很大。

代码语言:javascript
代码运行次数:0
复制
#include<iostream>
#include<vector>
#include<deque>

using namespace std;

int main()
{
    int n;
    deque<int> a;
    vector<int> res;
    cin >> n;
    for (int i = 0; i < n; ++ i)
    {
        int t;
        cin >> t;
        a.push_back(t);
    }
    while(a.size())
    {
        int m = a.size() / 3;
        vector<int> b;
        for (int i = 0; i < m; ++ i)
        {
            b.push_back(a.front());
            a.pop_front();
        }
        for (int i = 0; i < m; ++ i)
        {
            a.push_back(b[i]);    
        }
        
        res.push_back(a.front());
        a.pop_front();
    }
    for (int i = 0; i < res.size(); ++ i)
    {
        cout << res[i] << " ";
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 联想算法题-发牌序列
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档