当前位置:   article > 正文

华为OD机试题B卷【20230606】_华为odb卷

华为odb卷

面试题一(100分):

【数列描述】

有一个数列a[N] (N=60),从a[0]开始,每一项都是一个数字。数列中a[n+1]都是a[n]的描述。其中a[0]=1。

规则如下:

a[0]:1

a[1]:11(含义:其前一项a[0]=1是1个1,即“11”。表示a[0]从左到右,连续出现了1次“1”)

a[2]:21(含义:其前一项a[1]=11,从左到右:是由两个1组成,即“21”。表示a[1]从左到右,连续出现了两次“1”)

a[3]:1211(含义:其前一项a[2]=21,从左到右:是由一个2和一个1组成,即“1211”。表示a[2]从左到右,连续出现了1次“2”,然后又连续出现了1次“1”)

a[4]:111221(含义:其前一项a[3]=1211,从左到右:是由一个1、一个2、两个1组成,即“111221”。表示a[3]从左到右,连续出现了1次“1”,连续出现了1次“2”,连续出现了两次“1”)

请输出这个数列的第n项结果(a[n],0≤n≤59)。

输入描述

数列的第n项(0≤n≤59)
用例
输入:4
输出:11121

let data=4
markNum(data)
function markNum(data){
            let content='1'
            if(data==0) {//等于0时直接打印content
                console.log(content)
                return 
                }
            for(let i=1;i<=data;i++){
                let next='' //描述
                let chars=content.split('')
                let last=chars[0]
                let count=1 //记录chars中相同字符的个数
                for(let j=1;j<chars.length;j++){
                    if(chars[j]===last){
                        count++
                    }else{
                        next+=count+last
                        count=1
                        last=chars[j]
                    }
                }
                next +=count+last
                content=next
            }
            console.log(content,"content") // 111221
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

面试题二(100):

【拔河比赛】
1、按照身高优先、体重次优先的方式准备阵容
2、按规定参照对手派出十名对手
输入描述
1、n,m n代表身高,m代表体重
具体的不太记得了。。。
用例输入:

输入:n m
     182 70
     183 70 
     184 70
     185 70
     186 70
     180 71
     180 73
     180 74
     180 65
     180 66
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

输出描述
用例输出:

输出:
     186 70
     185 70
     184 70
     183 70
     182 70
     180 74
     180 73
     180 71
     180 66
     180 65
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

面试题三(200):

【we are a team】
总共有 n 个人在机房,每个人有一个标号(1<=标号<=n),他们分成了多个团队,

需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中,具体的:

消息构成为 a b c,整数 a、b 分别代表两个人的标号,整数 c 代表指令

  1. c == 0 代表 a 和 b 在一个团队内

  2. c == 1 代表需要判定 a 和 b 的关系,如果 a 和 b 是一个团队,输出一行’we are a
    team’,如果不是,输出一行’we are not a team’

  3. c 为其他值,或当前行 a 或 b 超出 1~n 的范围,输出‘da pian zi’

输入描述
第一行包含两个整数 n,m(1<=n,m<100000),分别表示有 n 个人和 m 条消息

随后的 m 行,每行一条消息,消息格式为:a b c(1<=a,b<=n,0<=c<=1)

输出描述

  1. c ==1,根据 a 和 b 是否在一个团队中输出一行字符串,在一个团队中输出‘we are a team‘,不在一个团队中输出’we are not a team’
  2. c 为其他值,或当前行 a 或 b 的标号小于 1 或者大于 n 时,输出字符串‘da pian zi‘
  3. 如果第一行 n 和 m不符合题目要求的范围,输出"NULL"

用例:

输入输入值
5 7
1 2 0
4 5 0
2 3 0
1 2 1
2 3 1
4 5 1
1 5 1
输出输出值
We are a team
We are a team
We are a team
We are not a team
const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});const lines = [];
let n, m;
rl.on("line", (line) => {lines.push(line);
if (lines.length === 1) {[n, m] = lines[0].split(" ").map(Number);}
if (m && lines.length === m + 1) {
lines.shift();
const msgs = lines.map((line) => line.split(" ").map(Number));print(msgs, n, m);
lines.length = 0;}
});
function print(msgs, n, m)
 {
    if (n < 1 || n >= 100000 || m < 1 || m >= 100000) return console.log("Null");
    const ufs = new UnionFindSet(n);
    msgs.sort(([a1, b1, c1], [a2, b2, c2]) => c1 - c2).forEach((msg) => {const [a, b, c] = msg;
    if (a < 1 || a > n || b < 1 || b > n) {
        return console.log("da pian zi");
        }if (c === 0) {
            ufs.union(a, b);
            } else if (c === 1) {
                const res =ufs.find(a) === ufs.find(b) ? "We are a team" : "We are not a team";console.log(res);} else {
                    console.log("da pian zi");}});
}
class UnionFindSet {constructor(n) {
    this.fa = new Array(n + 1).fill(0).map((_, idx) => idx);
    }
    find(x) {
    if (this.fa[x] !== x) {
    this.fa[x] = this.find(this.fa[x]);
    return this.fa[x];
    }
    return x;
    }
    union(x, y) {
    let x_fa = this.find(x);
    let y_fa = this.find(y);
    if (x_fa !== y_fa) {
    this.fa[y_fa] = x_fa;
    }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

总结:

编码工具:牛客网在线输入输出

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/467518
推荐阅读
相关标签
  

闽ICP备14008679号