關於牛客、賽碼、測評等考試平臺的前端輸入輸出的整理

 

編程題總結:

一、首先要理清題意,理清思路,給出的條件都是有用的,沒用到確定有問題;javascript

二、最好先要總結規律,看一下可能出現的狀況有哪些特例;java

三、要仔細是否有語法錯誤;!!!!!!node

四、分清功能點,一點一點的驗證。 編程

 

一、牛客網上邊的編程題的輸入輸出:node V0.12.12 環境下

多行輸入: 數組

//多行的輸入
process.stdin.resume();
process.stdin.setEncoding('ascii');
var input = "";
var input_array = "";
process.stdin.on('data', function(data){
    input += data;//這裏的data保存的是以換行\n全部的加起來的一個字符串
});
//以下表示每一個用例有三行的時候的結果
//注意:假若有數組的時候,數組內保存的是字符串形式,須要添加 + 來轉化成真正的數字。

//以回車來分割 //到這個地方會把每行都當成一個字符串保存到一個數組中去,數組的最後一項是一個空字符"",

//因此按照題目給定,依次把數組的元素賦值給變量就好了 //這裏就要觀察所給用例的特徵了,依次來進行輸出
process.stdin.on('end', function (){ input_array = input.split("\n"); //以回車來分割的 var line_1 = input_array[0]; var line_2 = input_array[1]; var line_3= input_array[2]; console.log(line_1); });

以下實例:網絡

//假如輸入是以下的
15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

//那麼讀取進來的時候的input_array以下
[ '15', '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15', '' ]
一個包含三個字符串的數組

//typeof測試爲string

//切割中間的字符串獲得一個數組,可是數組的元素類型依然爲字符串

單行的狀況就只取input_array[0];

以下便於作題的時候抄上去:函數

process.stdin.resume();
process.stdin.setEncoding('ascii');
var input = "";
var input_array = "";
process.stdin.on('data', function(data){
    input += data;
});
process.stdin.on('end', function (){
    input_array = input.split("\n");
    var line_1 = input_array[0];
    var line_2 = input_array[1];
    var line_3= input_array[2];    
    //這裏分析出填入的參數

    console.log(func(p1,p2,,,,));//輸出結果
});

//這裏是處理函數
function func(p1,p2,,,,){

}

 單行輸入的另外一種方法:

//參考判題系統,可是隻能讀取單行的輸入
var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});
rl.on('line', function(line){
   var tokens = line.split(' ');
    console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
});

對於賽碼網可能真的不適合用js來編寫,那別人經過的代碼貼到輸入裏面,結果是不經過,不懂爲什麼,還有就是,這些題能不能用js來作都是個問題。連着作了四五場考試了,本地測試的代碼都能經過,線上就是不經過,也不知道時輸入輸出的問題,仍是真的是我編寫的程序的問題。測試

個人理解是這個網站的js,每次調用一次read_line()函數,就會讀取同樣,當行數已知的時候直接調用相同的次數就能夠得到字符串形式的參數。網站

輸出使用print() 函數,每次輸出一行,自動換行,若是結果是一行由空格隔開的狀況就把結果放到一個數組中,而後調用arr.join(" ");能夠輸出。ui

若是輸出爲一次輸入多行輸出,就須要循環調用print(); 來輸出。

不知道理解的對不對,反正如今不少題根本就無法用js來操做,或者有的時候多是內部環境有一些方法不容許使用,而後,就會致使錯誤。

2.一、賽碼網單行輸入:(程序執行一次,讀取一行)

var line;
while(line = read_line()){
    line = line.split(' ');
    print(parseInt(line[0]) + parseInt(line[1]));
} 

2.二、賽碼網的兩行輸入:(函數執行一次,讀取兩行),使用+或者parseInt()能夠將讀取的字符串型轉爲數值型。

var first_line = read_line();//字符串型的,若是是數字須要轉換
var arr = [];
var line;
while(line= read_line()){
  arr.push(line);//把後邊的每一行都看成一個字符串,做爲數組的元素填入數組中,這樣就能夠操做了
}
print(fn());

 同理三行的時候,判斷與以前行的特徵的不一樣,判斷出來保存到一個值當中。

 直接這樣也是能夠的:

var str1 =read_line().trim();
var str2 =read_line().trim(); 

牛客網的答案實例:(要仔細分析,不少時候都是輸入輸出的問題)

一、水仙花的問題

問題描述:「水仙花數」是指一個三位數,它的各位數字的立方和等於其自己,好比:153=1^3+5^3+3^3。如今要求輸出全部在m和n範圍內的水仙花數。

輸入:(特色:單行,兩個值)輸入數據有多組,每組佔一行,包括兩個整數m和n(100<=m<=n<=999)。輸入:100 120

輸出:對於每一個測試實例,要求輸出全部在給定範圍內的水仙花數,就是說,輸出的水仙花數必須大於等於m,而且小於等於n,若是有多個,則要求從小到大排列在一行內輸出,之間用一個空格隔開;
若是給定的範圍內不存在水仙花數,則輸出no; 每一個測試實例的輸出佔一行。輸出:no

程序代碼:

//水仙花的題目
var sc;
while(sc = read_line()){
    var arr = sc.split(' ');//單行輸入,調用依次read_line()函數
    n=parseInt(arr[1]);
    m=parseInt(arr[0]);
    //輸出
    print(fn(n,m));
}
function fn(n,m){
    var res = "";    
    for (i=n;i<=m;i++){
        var l = Math.floor(i/100);
        var k = Math.floor((i%100)/10);
        var j = i%10;
        var num = Math.pow(l,3) + Math.pow(k,3) + Math.pow(j,3);
        if(i == num){
            res = res + i+" ";
        }
    }
    return res == "" ? "no":res;
}

二、輸入第一行表示後邊的行數,接着是具體的數值(特色,首行表示輸入的行數,接着幾行是結果,輸入的行數不肯定)

題目描述:

有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少走法?

注:規定從一級到一級有0種走法。

輸入:輸入數據首先包含一個整數n(1<=n<=100),表示測試實例的個數,而後是n行數據,每行包含一個整數m,(1<=m<=40), 表示樓梯的級數。

以下樣例:

2

2

3

輸出:對於每一個測試實例,請輸出不一樣走法的數量。

輸出結果:

1

2

var line;
var data = [];//結果數組中,長度是未知的,不肯定的,因此不能用變量來直接的保存。
while(line = read_line()){
    data.push(line);//這裏是關鍵
}
for(var i=1; i<data.length; i++){//依次對輸入求值
    print(stair(data[i]-1));//可使用兩次輸出函數來輸出,其實也能夠直接在兩個結果中間添加「\n」來換行。
}
//處理函數
function stair(num){
    if(num === 0){
        return 0;
    }if(num === 1){
        return 1;
    }if(num === 2){
        return 2;
    }
    return stair(num-1)+stair(num-2);
};

三、多行輸出,一次輸入,多行輸出。

題目:研究生考試

題目描述: 

我相信參加本次在線招聘考試的有很多研究生同窗。咱們知道,就計算機相關專業來講,考研有4門科目,分別是政治(滿分100分),英語(滿分100分),數學(滿分150分)和專業課(滿分150分)。

某校計算機專業今年錄取研究生的要求是:政治、英語每門課成績不低於60分,數學和專業課不低於90分,總成績不低於310分。而且規定:在知足單科以及總成績最低要求的基礎上,350分以上(含350分)爲公費(Gongfei),310分~349分爲自費(Zifei)。

請編程判斷考生的錄取狀況。

這樣寫是對的:

var n = parseInt(read_line().trim());
var i =0,line,p,e,m,o;
for(;i<n;i++){
	line = read_line().split(' ');
  	p = parseInt(line[0]);
  	e = parseInt(line[1]);
  	m = parseInt(line[2]);
  	o = parseInt(line[3]);
	mmm(p,e,m,o)
}

function mmm(a,b,c,d) {
	var s = a+b+c+d;
  if(a<60 || b<60 || c< 90 || d < 90 || s < 310){
    	print('Fail');
    } else if(s<350) {
    	print('Zifei');
    } else{
        	print('Gongfei');
    }
} 

三、測評網站的編程注意事項:

一、不容許在本地編程;

二、請認真閱讀題目要求,嚴格按樣例數據的格式輸入和輸出;

三、除了提交代碼,你還本身輸入測試數據,本身分析結果。系統不會告訴你正確仍是錯誤。也就是說,可能本身測試的是正確的,可是真正的測試倒是錯誤的。即便運行成功也要認真檢查,是否考慮到了每種狀況,是否有多餘或缺乏的字符(注意空格和換行)。

使用js語言來編程:

使用Google V8 Engine解釋運行。禁止使用圖形、文件、網絡、系統相關的操做。請勿修改主函數名main()。

如何輸入:調試代碼時你須要手動輸入測試數據,請嚴格按照題目樣例格式輸入

  輸入數據時,字符串數據先後需加英文引號輸入多個數據時請用英文逗號隔開,而且與main()中參數個數相同。

如何輸出:請使用console.log()輸出

//輸入一組數據並輸出 
function main(a1,a2,a3,a4,a5,a6){
    console.log(a1,a2,a3,a4,a5,a6);
}

反正就是全部的輸入全是這個函數的參數,在函數內部輸出使用console.log();來輸出。輸出多行應該使用多個console.log();來進行;

多組輸入沒講,也就是說不會給多組輸入,每次也就是一組輸入。

相關文章
相關標籤/搜索