网易有道内推编程题

[编程题] 洗牌

洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗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

只要找出洗牌前后 数列的关系 , 就可以轻松得到如下的程序

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main()
  5. {
  6.    int T,n,k;
  7.    int i,j;
  8.    vector<int> s0,s1;
  9.    
  10.    while(cin>>T)
  11.    {
  12.        for(i=0;i<T;i++)
  13.        {
  14.            cin>>n>>k;
  15.            s0.clear();
  16.            s0.resize(2*n);
  17.            for(j=0;j<2*n;j++)
  18.                cin>>s0[j];
  19.            while(k--){
  20.                s1.clear();
  21.                for(j=0;j<n;j++){
  22.                    s1.push_back(s0[j]);
  23.                    s1.push_back(s0[j+n]);
  24.                }
  25.                for(j=0;j<2*n;j++)
  26.                    s0[j]=s1[j];
  27.            }
  28.            
  29.            for(j=0;j<2*n-1;j++)
  30.                cout<<s0[j]<<" ";
  31.            cout<<s0[2*n-1]<<endl;
  32.        }
  33.    }
  34.    return 0;
  35. }

来自为知笔记(Wiz)

时间: 2024-12-23 15:47:37

网易有道内推编程题的相关文章

网易有道2017内推编程题

没有报有道,在牛客上做的... 1.洗牌 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程. 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张.首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿 着第n+1张到第2n张(下半堆).接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的 倒数第二张牌,直到最后放下左手的第一张牌.接着把牌合并起来就可以了. 例如有6张牌,最开始牌的序列是1,2,

两种排序方法 网易2017内推编程题

考拉有n个字符串字符串,任意两个字符串长度都是不同的.考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序.例如: "car" < "carriage" < "cats" < "doggies < "koala" 2.根据字符串的长度排序.例如: "car" < "cats" < "koala" < &

网易有道机试编程题

1:洗牌 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程. 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张.首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆).接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌.接着把牌合并起来就可以了. 例如有6张牌,最开始牌的序列是1,2,3,4,5,6.首先分成两组,左手拿

2016网易有道内推笔试题

1. 洗牌 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description:洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程. 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张.首先,我们把这2n张牌分成两堆, 左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆).接着就开始洗牌的过程,先放下右手的 最后一张牌,

链家秋招内推编程笔试题目

参加8.19的链家内推笔试,总体来说题目难度不大,20个选择题还有三道编程题. 选择题,里面有两道关于IP地址计算的题目,有点忘了,不知道最后的计算有没有问题,所以还需要复习学习完的知识, 因为不知道什么时候就会遇到相关的问题. 编程题,自我感觉,难度是偏简单的,如果不能达到两道AC,那就是不合格了. 1. 给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数 . 样例输入: 9 2 2 1 3 3 3 2 3 1 样例输出: 4 思路: 应使用贪心算法. 分析:先存入数组,然后记录有

网易2017校招内推笔试练习卷编程题1--1019.数字黑洞20

给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到 一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 现给

网易2017校招内推笔试练习卷编程题2--出专辑

你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中.每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒.为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ? 输入描述: 每组测试用例仅包含一组数据,每组数据第一行为三个正整数 n, s, L. 保证 n ≤ 100 , s ≤ L ≤ 10000 输出描述

【遇见时光】网易有道2017内推编程-洗牌

洗牌 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description: 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程. 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张.首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆).接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左

网易机器学习算法工程师笔试编程题

1. 小易为了向他的父母表现他已经长大独立了,他决定搬出去自己居住一段时间.一个人生活增加了许多花费: 小易每天必须吃一个水果并且需要每天支付x元的房屋租金.当前小易手中已经有f个水果和d元钱,小易也能去商店购买一些水果,商店每个水果售卖p元.小易为了表现他独立生活的能力,希望能独立生活的时间越长越好,小易希望你来帮他计算一下他最多能独立生活多少天. 输入描述: 输入包括一行,四个整数x, f, d, p(1 ≤ x,f,d,p ≤ 2 * 10^9),以空格分割 输出描述: 输出一个整数, 表