【笔试】洗牌

原创 2016年08月28日 18:48:44

[编程题]洗牌
洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿 着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的 倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。 例如有6张牌,最开始牌的序列是1,2,3,4,5,6。首先分成两组,左手拿着1,2,3;右手拿着4,5,6。在洗牌过程中按顺序放下了 6,3,5,2,4,1。把这六张牌再次合成一组牌之后,我们按照从上往下的顺序看这组牌,就变成了序列1,4,2,5,3,6。 现在给出一个原始牌组,请输出这副牌洗牌k次之后从上往下的序列。
输入描述:
第一行一个数T(T ≤ 100),表示数据组数。对于每组数据,第一行两个数n,k(1 ≤ n,k ≤ 100),接下来一行有2n个数a1,a2,…,a2n(1 ≤ ai ≤ 1000000000)。表示原始牌组从上到下的序列。

输出描述:
对于每组数据,输出一行,最终的序列。数字之间用空格隔开,不要在行末输出多余的空格。

输入例子:
3
3 1
1 2 3 4 5 6
3 2
1 2 3 4 5 6
2 2
1 1 1 1

输出例子:
1 4 2 5 3 6
1 5 4 3 2 6
1 1 1 1

#include<iostream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
vector<int> func(int n,int m)
{
    vector<int>iVec;
    for(int i = 0; i < 2*n;i++)
    {
        int iNum;
        cin>>iNum;
        iVec.push_back(iNum);
    }
    for(int j = 0; j < m;j++)
    {
        vector<int>iVecSubLeft(iVec.begin(),iVec.begin()+n);
        vector<int>iVecSubRight(iVec.begin()+n,iVec.end()); 
        for(int i = 0; i < n;i++)
        {
            iVec.push_back(iVecSubLeft[i]);
            iVec.push_back(iVecSubRight[i]);
        }
    }
    return iVec;
  // copy(iVec.begin(),iVec.end(),ostream_iterator<int>(cout," "));
   //cout<<endl;

}
int main()
{
    cout<<"请输入组数:"<<endl;
    int groupNum = 0;
    cin>>groupNum;
    vector<vector<int>>iVecvec;
    for(int num = 0; num < groupNum;num++)
    {
        int n,m;
        cin>>n>>m;
        vector<int> iVec = func(n,m);
        iVecvec.push_back(iVec);
    }
    for(int i = 0; i < iVecvec.size();i++)
    {
        copy(iVecvec[i].begin(),iVecvec[i].end();ostream_iterator<int>(cout,"  "));
        cout<<endl;
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

网易笔试:洗牌

网易笔试:洗牌 题目描述 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆...
  • u010429424
  • u010429424
  • 2017年08月09日 13:56
  • 241

c#实现洗牌程序

洗牌程序,意思就是,打乱现有序列的次序,并每次执行不会出现次序相同的序列的程序。 那么首先想到了使用随机数Random,快速实现如下: public int[] Shuffle(int...
  • Wolftotem18
  • Wolftotem18
  • 2016年09月12日 16:06
  • 443

String数组洗牌和List集合洗牌

造牌: Card[] cards = new Card[54]; int j=0; for(int i=0; i
  • badyflf
  • badyflf
  • 2012年10月02日 01:56
  • 1677

java实现洗牌算法

业务代码写多了,应该时不时研究下算法,以保持思维的灵活性 import java.util.Iterator; import java.util.LinkedList; import java.ut...
  • u011589986
  • u011589986
  • 2016年11月30日 17:07
  • 805

洗牌算法和随机数生成

【题目】 要求输入一组数据,输出的结果为这组数据的随机排列。 【解题思路】 1.      调用头文件algorithms中的random_shuffle函数。该函数的本质就是生成随机位置,不断...
  • sinat_26230689
  • sinat_26230689
  • 2016年08月31日 22:42
  • 527

洗牌算法 (C语言)

#include "stdafx.h" #include #include #include #include #include #include "OBJC_DEF...
  • microchenhong
  • microchenhong
  • 2011年05月31日 13:20
  • 2549

《C语言及程序设计》程序阅读——洗牌

返回:贺老师课程教学链接//随机数发牌游戏的C语言实现: #include #include #include #include using namespace std; void initial(i...
  • sxhelijian
  • sxhelijian
  • 2015年05月02日 10:59
  • 1974

网易有道 洗牌

洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手...
  • lezong2011
  • lezong2011
  • 2016年08月19日 23:22
  • 508

经典洗牌算法C语言实现

这种洗牌方式的算法: 1:初始化一个长度为54的数组,和54张牌。 2:从i=1开始到54,每次从剩余的牌堆中随机抽一张牌放到数组的i下标下。 这样我们可以用一个数组做也可以用两个数组做。 就...
  • a88141302
  • a88141302
  • 2014年08月28日 11:39
  • 2422

一个简单的C代码,模拟洗牌发牌

一个用指针、结构体,数组实现的高效的模拟洗牌发牌程序:
  • u012187684
  • u012187684
  • 2014年05月26日 16:17
  • 2279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【笔试】洗牌
举报原因:
原因补充:

(最多只允许输入30个字)