2018科大讯飞软件开发岗两道编程题(js版)

1修改成绩(91%)

/**
 * 修改成绩
 * 时间限制:C/C++语言 1000MS;其他语言 3000MS
 * 内存限制:C/C++语言 65536KB;其他语言 589824KB
 * 题目描述:
 * 华老师的n个学生参加了一次模拟测验,考出来的分数很糟糕,但是华老师可以将成绩修改为[0,100]中的任意值,所以他想知道,如果要使所有人的成绩的平均分不少于X分,至少要改动多少个人的分数?
 * 
 * 输入
 * 第一行一个数T,共T组数据(T≤10)
 * 
 * 接下来对于每组数据:
 * 
 * 第一行两个整数n和X。(1≤n≤1000, 0≤X≤100)
 * 
 * 第二行n个整数,第i个数Ai表示第i个学生的成绩。(0≤Ai≤100)
 * 
 * 输出
 * 共T行,每行一个整数,代表最少的人数。
 * 
 * 
 * 样例输入
 * 2
 * 5 60
 * 59 20 30 90 100
 * 5 60
 * 59 20 10 10 100
 * 样例输出
 * 1
 * 2
 * 
 * Hint
 * 对于第一组数据,将59改成60即可
 */

function func(arr, X){
    arr.sort((a1, a2)=>{
        return a1 - a2;
    });
    var sum = 0;
    for(var i = 0; i < arr.length; i++){
        arr[i] = parseInt(arr[i]);
        sum += arr[i];
    }
    for(var i = 0; i < arr.length; i++){
        if(sum / arr.length >= X){
            console.log(i);
            return;
        }
        sum += 100 - arr[i];   
    }
    return;
}

var readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal: false
});

var curLine = 0;
var T = 0;
var n, X, arr = [];

rl.on('line', function (line) { // javascript每行数据的回调接口
    if(curLine === 0){
        T = parseInt(line.trim());
    }else if(curLine % 2 === 1){
        n = parseInt(line.trim().split(' ')[0]);
        X = parseInt(line.trim().split(' ')[1]);
    }else{
        arr = line.trim().split(' ');
        func(arr, X);
    }
    curLine++;
    if(curLine / 2 > T){
        rl.close();
    }
});

2杀手(AC)

/**
 * 杀手
 * 时间限制:C/C++语言 1000MS;其他语言 3000MS
 * 内存限制:C/C++语言 65536KB;其他语言 589824KB
 * 题目描述:
 * 有n个杀手排成一行,每个杀手都有一个不同的编号(编号为1-n),在每个夜晚,杀手都会行动,如果某个杀手编号大于他右边的杀手的编号,他就会杀死他右边的杀手,杀手是的行动是瞬间的,因此一个人可能某一个夜晚既杀死了别人又被别人杀死,例如3,2,1这个顺序,在第一个夜晚2会杀死1,同时3也会杀死2。
 * 
 * 显而易见,一段时间之后,就不会有人杀或被杀,平安夜也就到来了,请问在平安夜之前有多少个夜晚。
 * 
 * 输入
 * 输入第一行是一个整数n(1≤n≤100000),表示杀手的数量。
 * 
 * 接下来一行有n个数,是一个1-n的全排列。
 * 
 * 输出
 * 输出包含一个整数,表示平安夜之前经历了多少个夜晚。
 * 
 * 
 * 样例输入
 * 10
 * 10 9 7 8 6 5 3 4 2 1
 * 样例输出
 * 2
 * 
 * Hint
 * 补充样例
 * 输入样例2
 * 6
 * 1 2 3 4 5 6
 * 输出样例2
 * 0
 * 样例解释:
 * 样例1中杀手的变化为[10 9 7 8 6 5 3 4 2 1]->[10 8 4]->[10],故答案为2。
 */

function func(arr){
    var tmp, flag, cnt = 0;
    while(arr.length > 1){
        tmp = [arr[0]];
        flag = true;
        for(var i = 1; i < arr.length; i++){
            if(arr[i] > arr[i-1]){
                tmp.push(arr[i]);
            }else{
                flag = false;
            }
        }
        if(flag){
            break;
        }
        cnt++;
        arr = tmp;
    }
    console.log(cnt);
}

var readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal: false
});

var curLine = 0;
var n = 0, arr = [];

rl.on('line', function (line) { // javascript每行数据的回调接口
    if(curLine === 0){
        n = parseInt(line.trim());
    }else{
        arr = line.trim().split(' ');
        for(var i = 0; i < arr.length; i++){
            arr[i] = parseInt(arr[i]);
        }
        func(arr);
        rl.close();
    }
    curLine++;
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值