网易有道2017内推编程题 洗牌(python)


Posted in Python onJune 19, 2019

本文实例为大家分享了网易有道2017内推编程题:洗牌,供大家参考,具体内容如下

'''
[编程题] 洗牌
时间限制:1秒
空间限制:32768K
洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗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)。表示原始牌组从上到下的序列。

输出描述:

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

输入例子1:

3 3 1 1 2 3 4 5 6 3 2 1 2 3 4 5 6 2 2 1 1 1 1

输出例子1:

1 4 2 5 3 6 1 5 4 3 2 6 1 1 1 1

'''

'''
解题思路:散列表
  这道题是有道的内推题,所以考点和字典数据集有关,这道题目考的是散列表,如果把新牌放入数组一中,
  洗过的牌放入数组二中,那么数组一个数组二之间各个元素的位置存在一定的映射关系。即:
  数组一中在j号位置的元素在数组二中的位置是index = (2j % len(数组二)),
  如果该位置已经有元素,则index自动加一,搜索下一个位置,直到找到空位置。
  这道题目的数据比较简单,其实没必要用散列表做,依靠找规律或者切片就能把做出来,
  很多人用的是切片,使用[::2]和[1::2]找出数列二中的所有偶数位和奇数位,把数列一的前n个数和后n个数放进去即可。
  但我个人觉得python切片的效率不高,于是换了找规律的方法,如果 2j < 2n , 则index=2j,否则index = index % (2*n) + 1,
  如此循环k次。使用这种方法每次都直接找到某张牌在k次洗牌后的位置,避免了大量的切片操作,
  也避免了大量在数组中寻找元素并赋值的操作。
  (Ps,这倒题目的输入和输出比较坑爹)
'''

'''
代码运行结果:
答案正确:恭喜!您提交的程序通过了所有的测试用例
'''

T = int(input())
 
array_list = []
n, k = [int(each) for each in input().split()]
for x in range(T):
 digs = [int(each) for each in input().split()]
 array = digs[0:2*n]
 results = [None] * (2 * n)
 for j in range(2*n):
 index = j
 for i in range(k):
  index = 2 * index
  if index >= 2 * n:
  index = index % (2*n) + 1
 results[index] = array[j]
 n, k = digs[-2:]
 results = map(str, results)
 print(' '.join(results))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基础教程之基本内置数据类型介绍
Feb 20 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 Python
pandas多级分组实现排序的方法
Apr 20 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
Jul 13 Python
实例讲解python中的序列化知识点
Oct 08 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
Python中常用的高阶函数实例详解
Feb 21 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 Python
Python利用FlashText算法实现替换字符串
Mar 31 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 #Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 #Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
Jun 19 #Python
python调用动态链接库的基本过程详解
Jun 19 #Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 #Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 #Python
PyQt5实现从主窗口打开子窗口的方法
Jun 19 #Python
You might like
php中文件上传的安全问题
2006/10/09 PHP
PHP常用代码
2006/11/23 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
php项目开发中用到的快速排序算法分析
2016/06/25 PHP
js 蒙版进度条(结合图片)
2010/03/10 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
基于jQuery的获取标签名的代码
2012/07/16 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
jQuery 判断元素整理汇总
2017/02/28 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
vue项目关闭eslint校验
2018/03/21 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
python中学习K-Means和图片压缩
2017/11/20 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
python实现手机通讯录搜索功能
2018/02/22 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
基于python3生成标签云代码解析
2020/02/18 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
客服部工作职责范本
2014/02/14 职场文书
难忘的一天教学反思
2014/04/30 职场文书
授权委托书公证
2014/09/14 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL