微软18预科生笔试题
1. 击鼓传花。有N个人标号为0~N-1,每次击鼓传递人数为t。花从第0个人开始传,到t停止时,该人淘汰,花交给下一个人。持续直到只剩最后一人。设计函数求胜利者。
输入: people,整数
sec,整数
输出: winner,整数
实例: people: 3
sec: 2
输出: 1,人的标号为[0,1,2],第一次传两个人,花到2手里,2淘汰,花交给0;第二次传两人,花回到0手里,0淘汰,花交给1;仅剩一人,1胜出
2.一个长度为N的数列,数据大小随机。从0位置开始寻找右边比左边大的数,如果满足就进行标记,一次寻找结束后,将标记的数据移除。直到没有需要标记的数据。设计函数求需要寻找的次数
输入: numOfTrue,整数
highList,N*1数组
输出: days,整数
实例: numOfTrue: 4
highList: [3,7,9,8]
输出: 2,第一次移除7,9.第二次移除8
3. 一个长度为N的数列,数据大小随机。如果某个位置的后面的数值比这个位置的数值小,则记录这两个位置的差值为anonymous。找出整个数列的最大的anonymous。
输入: numOfPeople,整数
weightList,N*1数组
weightList: [5,7,4,8]
输出: 2,因为5比4大,anonymous为2;7比4大,anonymous为1;最大的anonymous为2
4.小明在实习,每天可以选择一个eazy的工作,或者一个hard的工作。但是当且仅当前一天没有工作时,才能在当天选择hard 的工作。不同的工作对应的salary不同。
给出在实习的天数和这些天里所有工作对应的salary组合。求出小明能拿到的最大salary
输入: numOfDays,整数
salaryList,N*2的二维数组
输出: maxSalary,整数
实例: numOfDays: 4
salaryList: [[1,5],[2,3],[2,9],[1,3]]
输出: 5+0+9+1=15