友塔游戏23春招前端笔试复盘

发布时间 2023-03-25 16:26:12作者: moyu2

笔试共计三道编程题,时间共计两小时,其中后面两道需要自己处理输入输出,平时习惯不用处理,突然上手才发现自己在这方面很弱,也惊觉自己在C语言方面也已经十分生疏,还需多多练习。

1.给出后序排列的算术式,计算结果,

如9,5,3,-,-,15,*,10,-

最后返回结果为5

思路:从左到右遍历给定的序列,利用栈存储数字,遇到符号则进行计算,再将结果压入栈内,最后栈内应该只剩最后的结果

 

2.给定n,k,计算出一个n位的数,每一位与前一位数字的差值的绝对值都是k,输出所有这样的数,并且从小到大排列

如给定2 7 得到结果是18 29 70 81 92

思路:先循环(1-9)确定第一位数字,再递归确定后序数字,后一位数字一定是由前一位数字+k或者-k得来,并且一定处于(0-9)之间,不然说明无法继续递归,知道递归n-1次得到后面n位数字

这里并没有考虑排序,而是得出所有结果并存储在数组中后,再排序进行输出

 

3.消消乐:给定N*10的点阵列,每一个点上都有一个(0-9)的数字

如果有超过K个相同的数字点连在一起,数字就会消除变为0

同时由于重力作用,如果一个非0数字点的下方数字是0,这个非0数字点以及同列上方的所有点就会下沉,

请最后输出消除结束之后的阵列。

思路:遍历整个阵列,BFS搜索连接大于K的区块(设置标记变量,记录压入队列次数是否大于等于K),并把对应数字点的值变为0

之后重新按列遍历数组,如果存在下方有点为0,而上方有点非0的情况,进行交换操作。