京东的题目本身不难,难在输入输出格式的问题。

第一题:

两个集合的并集。

输入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)));
    }
}