资源描述:
《网易有道2017内推编程题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.... 网易有道2017内推编程题1[编程题]洗牌22[编程题]构造队列5学习参考....1[编程题]洗牌洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。例如有6张牌,
2、最开始牌的序列是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、对于每组数据,输出一行,最终的序列。数字之间用空格隔开,不要在行末输出多余的空格。输入例子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
4、",&t);11.while(t--){12.scanf("%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++){19.a[2*i-1]=b[i];20.a[2*i]=b[j];21.}22.}学习参考....1.for(inti=1;i<=n;i++){2.printf("%d%c",
5、a[i],""[i==n]);3.}4.}5.return0;6.}importjava.util.Scanner; /** *每次读取一个数之后,算出他经过k次洗牌后的位置,只用一个长度为2n数组用来输出 *根据当前数的位置,可以算出经过一次洗牌后的位置 *如果当前数小于等于n(即在左手),则他下次出现的位置是2*当前位置-1 *如果当前位置大于n(即在右手),则他下次出现的位置是2*(当前位置-n) *个人建议在线面试题的时候如果5分钟内没想到好方法建议就使用暴力方法, *毕竟测试用例不通过什么都没用 *Created
6、bylizoon2016/8/20. */publicclassMain{ publicstaticvoidmain(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
7、=0;i<2*n;i++){ inttmp=i+ 1; for(intj= 0;j 0)System.out.print(res[0]);
8、 for(inti= 1;i< 2*n;i++){ System.out.print(""+res[i]); } System.out.println(); } }}2[编程题]构造队列小明同