資源描述:
《網(wǎng)易有道2017內(nèi)推編程題》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
洗牌在生活中十分常見(jiàn),現(xiàn)在需要寫(xiě)一個(gè)程序模擬洗牌的過(guò)程?,F(xiàn)在需要洗2n張牌,從上到下依次是第1張,第2張,第3張一直到第2n張。首先,我們把這2n張牌分成兩堆,左手拿著第1張到第n張(上半堆),右手拿著第n+1張到第2n張(下半堆)。接著就開(kāi)始洗牌的過(guò)程,先放下右手的最后一張牌,再放下左手的最后一張牌,接著放下右手的倒數(shù)第二張牌,再放下左手的倒數(shù)第二張牌,直到最后放下左手的第一張牌。接著把牌合并起來(lái)就可以了。例如有6張牌,最開(kāi)始牌的序列是1,2,3,4,5,6。首先分成兩組,左手拿著1,2,3;右手拿著4,5,6。在洗牌過(guò)程中按順序放下了6,3,5,2,4,1。把這六張牌再次合成一組牌之后,我們按照從上往下的順序看這組牌,就變成了序列1,4,2,5,3,6。現(xiàn)在給出一個(gè)原始牌組,請(qǐng)輸出這副牌洗牌k次之后從上往下的序列。1#include2#include3usingnamespacestd;45intmain()6{7intT,n,k;8cin>>T;9while(T--)10{11cin>>n>>k;12intnum=2*n;13vectortable(num);14for(inti=0;i>table[i];16while(k--)17{18vectorn1(table.begin(),table.end());19for(inti=0;i1while(!Q.empty())//隊(duì)列不空,執(zhí)行循環(huán){intx=Q.front();//取出當(dāng)前隊(duì)頭的值xQ.pop();//彈出當(dāng)前隊(duì)頭Q.push(x);//把x放入隊(duì)尾x=Q.front();//取出這時(shí)候隊(duì)頭的值printf("%d
2",x);//輸出xQ.pop();//彈出這時(shí)候的隊(duì)頭}做取出隊(duì)頭的值操作的時(shí)候,并不彈出當(dāng)前隊(duì)頭。小明同學(xué)發(fā)現(xiàn),這段程序恰好按順序輸出了1,2,3,...,n?,F(xiàn)在小明想讓你構(gòu)造出原始的隊(duì)列,你能做到嗎?[注:原題樣例第三行5有錯(cuò),應(yīng)該為3,以下已修正]1importjava.util.LinkedList;2importjava.util.Scanner;3publicclassNewTest{4publicstaticLinkedListfunc(intn){5LinkedListhelp=newLinkedList();6for(inti=n;i>=1;i--){7help.addFirst(i);8help.addFirst(help.removeLast());9}10returnhelp;11}12publicstaticvoidmain(String[]args){13intt;14Scannerscan=newScanner(System.in);15t=scan.nextInt();
316intn;17LinkedListres;18while(t-->0){19n=scan.nextInt();20res=func(n);21for(inti=0;i