资源描述:
《网易有道2017内推编程题.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、网易有道2017内推编程题1[编程题]洗牌22[编程题]构造队列51[编程题]洗牌洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。例如有6张牌,最开始牌的序列是1,2,3
2、,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≤)。表示原始牌组从上到下的序列。输出描述:对于每组数据,输出一行,最终的序列。数字之间用
3、空格隔开,不要在行末输出多余的空格。输入例子1:33112345632123456221111输出例子1:14253615432611111.#include2.#include3.#include4.#include5.usingnamespacestd;6.constintN=1005;7.intn,k,a[N],b[N];8.9.intmain(){10.intt;scanf("%d",&t);11.while(t--){12.scanf("%
4、d%d",&n,&k);n*=2;13.for(inti=1;i<=n;i++)14.scanf("%d",&a[i]);15.while(k--){16.for(inti=1;i<=n;i++)17.b[i]=a[i];18.for(inti=1,j=n/2+1;i<=n/2;i++,j++){1.a[2*i-1]=b[i];2.a[2*i]=b[j];3.}4.}5.for(inti=1;i<=n;i++){6.printf("%d%c",a[i],""[i==n]);7.}8.}9.return0;10.}import
5、java.util.Scanner; /** *每次读取一个数之后,算出他经过k次洗牌后的位置,只用一个长度为2n数组用来输出 *根据当前数的位置,可以算出经过一次洗牌后的位置 *如果当前数小于等于n(即在左手),则他下次出现的位置是2*当前位置-1 *如果当前位置大于n(即在右手),则他下次出现的位置是2*(当前位置-n) *个人建议在线面试题的时候如果5分钟内没想到好方法建议就使用暴力方法, *毕竟测试用例不通过什么都没用 *Createdbylizoon2016/8/20. */publicclassMain{ p
6、ublicstaticvoidmain(String[]args){ Scannersc= newScanner(System.in); intgroups=sc.nextInt(); while(groups--> 0){ intn=sc.nextInt(); intk=sc.nextInt(); int[]res= newint[2*n]; for(inti=0;i<2*n;i++){ inttmp=i+ 1;
7、 for(intj= 0;j 0)System.out.print(res[0]); for(inti= 1;i< 2*n;i++){ System.out.
8、print(""+res[i]); } System.out.println(); } }}2[编程题]构造队列小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序:while(!Q