成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

網(wǎng)易有道2017內(nèi)推編程題2道

233jl / 1453人閱讀

摘要:小明同學(xué)發(fā)現(xiàn),這段程序恰好按順序輸出了。現(xiàn)在小明想讓你構(gòu)造出原始的隊(duì)列,你能做到嗎輸入描述第一行一個整數(shù)表示數(shù)據(jù)組數(shù),每組數(shù)據(jù)輸入一個數(shù),輸入的所有之和不超過。

前言

其實(shí)本文的目的不全是這倆道題的解法上,而是加深對Node的基礎(chǔ)模塊readline的使用,先上題

1.洗牌

題目:

洗牌在生活中十分常見,現(xiàn)在需要寫一個程序模擬洗牌的過程。
現(xiàn)在需要洗2n張牌,從上到下依次是第1張,第2張,第3張一直到第2n張。首先,我們把這2n張牌分成兩堆,左手拿著第1張到第n張(上半堆),右手拿著第n+1張到第2n張(下半堆)。接著就開始洗牌的過程,先放下右手的最后一張牌,再放下左手的最后一張牌,接著放下右手的倒數(shù)第二張牌,再放下左手的倒數(shù)第二張牌,直到最后放下左手的第一張牌。接著把牌合并起來就可以了。
例如有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。
現(xiàn)在給出一個原始牌組,請輸出這副牌洗牌k次之后從上往下的序列。

輸入描述:

第一行一個數(shù)K(K ≤ 100),表示洗牌次數(shù)。第二行輸入最開始牌的序列(數(shù)字之間用空格隔開,且為2的倍數(shù))

輸出描述:

輸出一行,顯示最終的序列。數(shù)字之間用空格隔開,不要在行末輸出多余的空格。

代碼:

var readline = require("readline");//引入readline模塊
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal:false
});
 
var bool = -1;// 初始狀態(tài)為負(fù)數(shù),表示還沒開始讀取
var ans = 0;
var sequence;
var result = [];

rl.on("line",function(line){
    if(bool<0){
        bool = parseInt(line.trim());
    }else{
        
        sequence = line.split(" ").map(function(index) {
            return parseInt(index);
        })

        ans = sequence.length;

        while(bool!=0){

            var LeftList = sequence.slice(0,ans/2).reverse();
            var RightList = sequence.slice(ans/2,ans).reverse();

            for(var i = 0;i

示例

2.構(gòu)造隊(duì)列

題目:

小明同學(xué)把1到n這n個數(shù)字按照一定的順序放入了一個隊(duì)列Q中。現(xiàn)在他對隊(duì)列Q執(zhí)行了如下程序:

while(!Q.empty())              //隊(duì)列不空,執(zhí)行循環(huán)
{
    int x=Q.front();            //取出當(dāng)前隊(duì)頭的值x
    Q.pop();                 //彈出當(dāng)前隊(duì)頭
    Q.push(x);               //把x放入隊(duì)尾
    x = Q.front();              //取出這時(shí)候隊(duì)頭的值
    printf("%d
",x);          //輸出x
    Q.pop();                 //彈出這時(shí)候的隊(duì)頭
}

做取出隊(duì)頭的值操作的時(shí)候,并不彈出當(dāng)前隊(duì)頭。
小明同學(xué)發(fā)現(xiàn),這段程序恰好按順序輸出了1,2,3,...,n。現(xiàn)在小明想讓你構(gòu)造出原始的隊(duì)列,你能做到嗎?

輸入描述:

第一行一個整數(shù)T(T ≤ 100)表示數(shù)據(jù)組數(shù),每組數(shù)據(jù)輸入一個數(shù)n(1 ≤ n ≤ 100000),輸入的所有n之和不超過200000。

輸出描述:

對于每組數(shù)據(jù),輸出一行,表示原始的隊(duì)列。數(shù)字之間用一個空格隔開,不要在行末輸出多余的空格.

代碼:

var readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal:false
});
 
var bool = -1;
var cur_line = 0;
var n;
 
rl.on("line",function(line){

    if(bool<0){
        bool = parseInt(line.trim());
    }else{
    
        n = parseInt(line.trim());
        cur_line++;
        var arr = [];
        
        for(var i=n;i>0;i--){
            arr.unshift(i);
            var x = arr.pop();
            arr.unshift(x);
        }
        
        console.log(arr.join(" "));
    }
 
    if (bool == cur_line) {
        bool = -1;
        cur_line = 0;
    }
    
});

示例

關(guān)于readline模塊

Readline是Node.js里實(shí)現(xiàn)標(biāo)準(zhǔn)輸入輸出的封裝好的模塊,通過這個模塊我們可以以逐行的方式讀取數(shù)據(jù)流,
而使用readline我們就得創(chuàng)建一個Interface對象,可以通過createInterface方法來創(chuàng)建,所以才有了上述代碼rl = readline.createInterface(options)
在這個方法中接收一個參數(shù),參數(shù)是一個對象,對象的屬性有如下

input: 屬性值為一個可以用來讀取流數(shù)據(jù)的對象,用于指定讀入數(shù)據(jù)的來源(必須);

output: 屬性值為一個可用來寫入流數(shù)據(jù)的對象,用于指定數(shù)據(jù)的輸出目標(biāo)(必須);

completer: 用于 Tab 自動補(bǔ)全的可選函數(shù)。(不常用);

terminal: 如果希望 input 和 output 流像 TTY 一樣對待,那么傳遞參數(shù) true ,并且經(jīng)由 ANSI/VT100 轉(zhuǎn)碼。 默認(rèn)情況下檢查 isTTY 是否在 output 流上實(shí)例化。(不常用)

常見的傳入?yún)?shù)如上述代碼所示

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

process是node的一個全局進(jìn)程,且是主線程,可自行百度

完成參數(shù)的傳入后便需要通過Interface對象的line事件來回調(diào),在該事件的回調(diào)函數(shù)中同樣需要使用一個參數(shù),該參數(shù)的值為被讀取的該行數(shù)據(jù)

通俗的講就是說在這個函數(shù)里,你事先一開始傳入了第一條數(shù)據(jù),那么參數(shù)的值就是該條數(shù)據(jù),然后在函數(shù)體里能夠?qū)υ摂?shù)據(jù)進(jìn)行處理,當(dāng)你完成數(shù)據(jù)的讀取后,也就是你在鍵盤上按下了enter鍵,此時(shí)在寫入一行數(shù)據(jù),那么該參數(shù)就是你第二次寫入的這條數(shù)據(jù),同樣的在函數(shù)體里你可以對該數(shù)據(jù)進(jìn)行處理
如上述代碼所示

rl.on("line",function(line){
    //···
}

感興趣的可以ctrlC+V體驗(yàn)一下

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/81356.html

相關(guān)文章

  • 網(wǎng)易內(nèi)推筆試

    摘要:參加了網(wǎng)易內(nèi)推的筆試,分享一下自己對三道編程題的理解。第二題有點(diǎn)投機(jī)取巧了題目順序?yàn)椴噬u塊,交錯的串,小易獨(dú)立的生活 參加了網(wǎng)易內(nèi)推的筆試,分享一下自己對三道編程題的理解。(ps:第二題有點(diǎn)投機(jī)取巧了)題目順序?yàn)椋翰噬u塊,交錯的01串,小易獨(dú)立的生活 var line = ABAB var tokens = line.split() var a = {}; var num =...

    kelvinlee 評論0 收藏0
  • 網(wǎng)易內(nèi)推筆試

    摘要:參加了網(wǎng)易內(nèi)推的筆試,分享一下自己對三道編程題的理解。第二題有點(diǎn)投機(jī)取巧了題目順序?yàn)椴噬u塊,交錯的串,小易獨(dú)立的生活 參加了網(wǎng)易內(nèi)推的筆試,分享一下自己對三道編程題的理解。(ps:第二題有點(diǎn)投機(jī)取巧了)題目順序?yàn)椋翰噬u塊,交錯的01串,小易獨(dú)立的生活 var line = ABAB var tokens = line.split() var a = {}; var num =...

    hufeng 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<