20160905京东网上笔试前端工程师编程题试题
京东的题目本身不难,难在输入输出格式的问题。
第一题:
两个集合的并集。
输入n组数据(n < 5),每一组第一行n(第一个集合的个数)和m(第二个集合的个数);第二行是第一个集合;第三行是第二个集合。
输出:从小到大输出每组的并集。
process.stdin.resume();
process.stdin.setEncoding('utf-8');
var input = "";
var input_array = "";
process.stdin.on('data', function (data) {
if(data == '\n'){
process.stdin.emit('end');
}
input += data;
});
function quickSort(arr) {
if (arr.length <= 1) {
return arr; // 如果数组只有一个数,就直接返回;
}
var numValue = arr[0]; // 每次取第一个数
var left = [];
var right = [];
for (var i = 1; i < arr.length; i++) {
if (arr[i] < numValue) {
left.push(arr[i]); // 基准点的左边的数传到左边数组
}
else {
right.push(arr[i]); // 基准点的右边的数传到右边数组
}
}
return quickSort(left).concat(numValue, quickSort(right)); // 递归不断重复比较
}
process.stdin.on('end', function () {
var arr = input.split("\n");
for (var i=0; i + 3 <= arr.length; i += 3) {
var numArray = arr[i].split(" ");
input_array=arr[i + 1].split(" ").concat(arr[i + 2].split(" "));
input_array = quickSort(input_array);
var flag = input_array[0];
process.stdout.write(flag);
for(var j = 1, len = parseInt(numArray[0]) + parseInt(numArray[1]);j < len ; j++){
if(flag != input_array[j]){
flag = input_array[j];
process.stdout.write(" " + flag);
}
}
process.stdout.write(" \n");
}
});
第二题:
幸运数字问题,具体题目可见[csdn] (http://bbs.csdn.net/topics/390518954/)
下面算法是完备的,但是京东这题的输出范围超出了int。
#include <iostream>
using namespace std;
void Lucky(int M)
{
if (M > 1)
{
Lucky(M >> 1);
printf_s("%d", (M & 1) == 0 ? 4 : 7);
}
}
void LuckyNumber(int N)
{
printf_s("%3d:", N);
if (N > 0)
{
Lucky(N + 1);
printf_s("\n");
}
else
{
printf_s("Invalid\n");
}
}
int main()
{
for (int N = 0; N < 20; ++N)
{
LuckyNumber(N);
}
system("pause");
return 0;
}
用Node.js实现如下:
var readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
var tokens = new Array();
var k = 0;
rl.on('line', function(line){
tokens[k] = line.split(' ');
k++;
if(k == parseInt(tokens[0])+1){
main(tokens);
rl.close();
}
});
function LuckyNumber(N)
{
var array = "";
for(var i =1, len = N.length; i < len; i++){
if(N[i] == 1){
array += "7";
}else{
array += "4";
}
}
if(array == ""){
return "0";
}else{
return array;
}
}
function main(tokens){
for(var i = 0, m = parseInt(tokens[0]); i < m; i++){
console.log(LuckyNumber((parseInt(tokens[i + 1])+1).toString(2)));
}
}