Momenta2019秋招技术岗笔试题
时长:120分钟 总分:98分
196浏览 0人已完成答题
题型介绍
题型 | 单选题 | 判断题 | 填空题 | 简答题 |
---|---|---|---|---|
数量 | 2 | 3 | 12 | 20 |
用 0 - 9 这 10 个数字组成一个首尾相连的字符串,每个数字可以重复...
 在三角形ABC中,已知sinA = 10sinB * sinC...
在三角形ABC中,已知sinA = 10sinB * sinC, cosA = 10cosB * cosC, 那么tanA是()
某车站每天 8:00--9:00,9:00--10:00,都恰有一辆客车到...
到站时刻 | 8:00--9:10 | 8:30--9:30 | 8:50--9:50 |
概率 | | | |
一旅客 8:20 到车站,则它候车时间的数学期望为()(精确到分).
写出以下代码段的输出结果,并简述理由 void test(int x[5...
写出以下代码段的输出结果,并简述理由
void test(int x[5]) { char a[5][6] printf(“1. %d”, sizeof(x)) printf(“2. %d”, sizeof(x[0])) printf(“3. %d”, sizeof(a)) printf(“4. %d”, sizeof(a + 0)) printf(“4. %d”, sizeof(&a)) }
用变量p给出下面的定义  a)一个指向指针的指针,它指向的...
设有k≥1堆硬币,各堆分别含有n1,n2...nk枚硬币。 游戏中两...
设有k≥1堆硬币,各堆分别含有n1,n2...nk枚硬币。
游戏中两个人交替拿取硬币,每次只能从剩余硬币数大于0的其中一堆取走任意数量硬币(至少1枚,至多取完),取走最后一枚硬币的人取胜。在游戏双方均足够理智的情况下,给出先手必胜的条件。
你有一套40张的卡牌,其中有若干张红牌,问至少有多少张红牌可以使得洗牌后,...
有L升汽油,m块钱,有若干条路段,行驶完每条路段消耗1升汽油和c元路费,加...
有L升汽油,m块钱,有若干条路段,行驶完每条路段消耗1升汽油和c元路费,加油费每升g元,问最多可以开多少条路段?
简述 join、inner join、outer join、left jo...
简述 join、inner join、outer join、left join、right join 的区别。
写出以下代码段的输出结果,并简述理由。 setTimeout(()...
setTimeout(() => { console.log(1) }, 0) new Promise((resolve) => { console.log(2) for( var i=0 i<1000000 i++ ) { i == 9999 && resolve() } console.log(3) }).then(() => { console.log(4) }) console.log(5)
写出以下代码段的输出结果,并简述理由。 void test(...
void test(int x[5]) { char a[5][6] printf(“1. %d”, sizeof(x)) printf(“2. %d”, sizeof(x[0])) printf(“3. %d”, sizeof(a)) printf(“4. %d”, sizeof(a + 0)) printf(“4. %d”, sizeof(&a)) }
在训练一个神经网络的时候存在多任务的情况,不同的任务有不同的loss函数表...
给定两幅图像上匹配的特征点对x, x',写出匹配点对与两帧图像之...
交叉线

每组样例的第一行是一个整数n (1≤n≤1000)。
接下来的一行输入有n个用空格隔开的不同的整数a1,a2,...,an (-1000000 ≤ ai ≤ 1000000),(ai,0)表示第i个点在横坐标的位置。输入样例: 2 4 0 10 5 15 4 0 15 5 10 输出描述: 对于每个输入文件,输出T行。
每行输出"y"表示这些半圆有相交或者"n"。输出样例 y n
队列得分
小M和大M要通过选择元素组成队列进行得分pk。目前存在队列S1,S2,S3...Sn,每个元素包括2个正整数属性set和value.从中选出任意K个元素S[i1],S[i2]...S[ik],保证顺序不变即i1 < i2 < i3< ... < ik,组成新的队列P1,P2,P3......Pk.我们通过一个机制评价队列的好坏:
Base=P1.value+P2.value+...Pk.value,
Bonus=10*tt为新队列中Pi.set=P(i+1).set的i个数.
最终得分Score=Base-Bonus求Score的最大值和取最大值时新队列元素个数的最小值.
输入描述: 第一行包含一个数N(0 < N <= 500)接下来N行每一行两个数表示S1,S2,...,Sn的set和value值 (0 < set,value <= 20)输入样例: 5 1 10 1 5 2 4 3 9 4 8 输出描述: Score的最大值和新队列元素个数的最小值输出样例 31 4
怪数
小M突然对怪数产生了兴趣。假设一个数n,如果[n/1]+[n/2]+...+[n/k](k为趋近于正无穷的正整数)为一个偶数,那么这个数是一个怪数,现在给定一个区间[a,b],求[a,b]之间有多少怪数。
[x]表示不大于x的最大整数。
输入描述: 输入只包含一行,有两个非负整数a,b(0<=a,b<=2^31,a<=b)。输入样例: 0 10 输出描述: 输出区间[a,b]中的怪数的个数。输出样例 6大家来扫雷
小M最近爱上了扫雷游戏,就是在一个n*m的区域中,有地雷,每一个方格上都有一个数字s,表示在这个方格周围有s颗雷,现在给你一张表明地雷的图,并且指定一个位置点开,请输出点开后的数字情况,若点开的地方的数字为0,则向该方格周围扩展,直到遇到数字或者地图边界为止,若点开的地方为地雷,那么直接输出"GG"。
周围指的是上,左上,左,左下,下,右下,右,右上八个方向。
输入描述: 第一行有两个数字n和m(2<=n,m<=1000),表示地图的大小,第二行有两个整数x和y(1<=x<=n,1<=y<=m),表示点击第x行y列的方格,接下来的是一个n行m列的一个矩阵,表示地图,其中.表示空地,*表示地雷。输入样例: 3 4 1 1 .... ..*. .... 输出描述: 如果点开的地方为地雷直接输出"GG"。否则输出点击指定位置后的地图,"."表示未点开的空地,"*"表示地雷,数字表示在该方格周围的地雷数目。输出样例 01.. 01*. 01..中位数
小M给你一个长度为n的数组,我们定义median数为该数组从小到大排序后,下标为(n-1)/2的数字。下标从0开始,(n-1)/2表示整数除法,即向下取整。现在我们已经得到了一个初始的数组,我们希望这个数组的median数是一个给定数字x。所以我们需要加入一些数到数组中从而完成我们的目标。数组中的元素可以重复,请问,最少需要加入多少个数字才能达成这个目标。
输入描述: 第一行输入两个整数n x (1 <= n <= 500, 1 <= x <= 10^5)。接下来一行有n个正整数表示初始的数组,用空格分开,范围是[1, 10^5]。输入样例: 3 2 2 3 4 输出描述: 输出需要加入最少的元素个数才能够使得新数组的median数成为x。输出样例 1
k倍多重正整数集合
k倍多重正整数集合的定义是:在一个多重集合(元素可以重复)中,不存在一个正整数是另一个正整数的k倍。
现在小M有n个正整数,你可以选择其中一些数构成k倍多重正整数集合。请求出最多能选出多少数来构成它。
输入描述: 第一行有两个整数n, k(1 <= n <= 10^5, 1 <= k <= 10^9)。接下来一行有n个正整数a1, a2, ..., an (1 <= ai <= 10^9)。输入样例: 6 2 2 3 6 5 4 10 输出描述: 最多能选出多少数构成k倍多重正整数集合。输出样例 3
连续子区间和
小M给你一串含有c个正整数的数组, 想让你帮忙求出有多少个下标的连续区间, 它们的和大于等于x。
输入描述: 第一行两个整数c x(0 < c <= 1000000, 0 <= x <= 100000000)第二行有c个正整数(每个正整数小于等于100)。输入样例: 3 6 2 4 7 输出描述: 输出一个整数,表示所求的个数。输出样例 4
交换查询
小M有一个N*M的方格,行列下标均从0开始。其中有K个方格中有数字,表示为(X, Y)方格中有数字C。对方格有2种操作,交换方格的两行或者交换方格的两列。
小M希望随时能够知道在经过一系列交换之后某一方格中是否含有数字,并且如果有的话,数字是多少。
输入描述: 输入数据第一行包含3个整数N, M, K。表示N行M列的方格,并且其中K个方格有数字。(1 <= N, M <= 10^5, 0 <= K <= 10^5)
接下来K行,每行有3个整数,X, Y, C,表示(X,Y)方格中有数字C。
(0 <= X <= N - 1, 0 <= Y <= M - 1, 1 <= C <= 1000)
接下来有一个整数T,表示有T次操作或询问。(0 <= T <= 10^5)
接下来T行,买行有三个整数Q, A, B。
当Q == 0时,交换行A和行B所有方格。
当Q == 1时,交换列A和列B所有方格。
当Q == 2时,询问(A, B)是否有数字,如果有则输出该数字,如果没有输出-1。
数据保证Q,A,B均在合法的范围之内。输入样例: 3 3 2 1 1 1 2 2 2 5 2 1 1 0 0 1 1 0 1 2 1 1 2 2 2 输出描述: 对于每个询问,输出一个整数表示其答案。输出样例 1 -1 2
大数乘法
n1 = '340282366920938463463374607431768211456'
n2 = '340282366920938463463374607431768211456'
输出
'115792089237316195423570985008687907853269984665640564039457584007913129639936'
要求:不能使用对大数相乘有内建支持的语言;需要包含对输入字符串的合法性校验 输入描述: 一行,两个非负整数n1,n2,保证|n1|+|n2|<10000,其中|n|是n作为字符串的长度输入样例: 340282366920938463463374607431768211456 340282366920938463463374607431768211456 输出描述: 输出n1*n2的结果输出样例 115792089237316195423570985008687907853269984665640564039457584007913129639936
中缀表达式转后缀表达式
要求:语言不限;输入输出均为单个字符串;操作数用单个小写字母表示,操作符只需支持 +-*/,按照四则运算顺序确定优先级,不包含括号 输入描述: 一个字符串为合法的中缀表达式
字符串长度不超过200000输入样例: a+b*c/d-a+f/b 输出描述: 对应的后缀表达式输出样例 abc*d/+a-fb/+
最小栈
要求:语言不限 输入描述: 第一行是一个数Q,接下来Q行每行表示一个操作,每行首先是操作op
若op==0,则输出当前栈中的最小值;
若op==1,表示push,接着正整数x,把在x放进栈顶;
若op==2,表示pop,弹出栈顶元素
保证Q<=500000,保证op==0或2时(即min操作和pop操作时)栈不为空。
你可以假设一开始栈的空的。输入样例: 7 1 3 1 4 0 1 2 0 2 0 输出描述: 对应每个op==0或2,如果是op==0输出当前栈中的最小值,如果是op==2输出弹出的元素。输出样例 3 2 2 3
二叉搜索树判定
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
5
/ \
1 3
/ \
4 6
输出: false
/**
* C++
* struct TreeNode {
* int val
* TreeNode *left
* TreeNode *right
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* }
*/
# Python
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
/**
* Go
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
接下来共n行,第i行三个数val_i,left_i,right_i,分别表示第i个节点的值val是val_i,左儿子left是第left_i个节点,右儿子right是第right_i个节点。
节点0表示空。
1<=n<=100000,保证是合法的二叉树输入样例: 5 1 5 2 3 1 0 0 3 4 5 4 0 0 6 0 0 输出描述: 输出"true"如果给定二叉树是二叉搜索树,否则输出"false"输出样例 false