公司考试记(Y-Y)

好久没有做题了,水平真的会退步。上机考个试做题都累,考试感悟如下:

第一题:水题,给16组目标(R,G,B),再输入多组(R’,G' , B'),距离定义为欧式距离,求输入每组 (R’,G' , B')与前面16个距离最小的并输出。

第二题:水题:题目描转。两人报数,数可能是虚报的,报数小的一定会检查报数大的,检查规则为数是否可有1-100内的数字相乘获得,1个数字只能用一次,(49不能为7x7),若两个人的数都不能满足检查要求,输出大的数,若两个人的数都满足要求,且如49和343,只能由一种方案相乘获得且数字冲突,则输出小的数。
理解: 较大的max,小的min。判断max和min是否均可以有1-100内的两个数相乘获得(一个数只能用一次)。按要求输出max或者min,要求按题意整理为下表:

是否存在方案构成max
是否存在方案构成min
输出
是,且大于1个方案
是,方案数不限
max
是,只有一种方案,且一个因子与构成min的方案相同
是,只有一种方案
min
是,只有一种方案,无因子与构成min的方案相同
是,只有一种方案
max
是,方案数大于等于1
是,方案数大于1个
max
max
max
min
例如49=1×49 (7×7不算)
343=7x49
输出49
结合上表只有2种情况是输出小的数
(1)两个数都只存在一种方案相乘获得,且有个数是公共因子,
(2)大的数无法由1-100相乘构成,小的可以。

题目转化为求min和max的1-100内的因子,然根据(1)(2)判断即可,如果数据大直接求质因子再优化下,数据比较小直接算1-100内满足条件的乘数因子即可。


第三题:给出AB两个杯子最大容量a和b以及目标n, n小于b,目标是在b中出现n升水,输出打印路径,(a,b,n范围为1-100)
存在以下6个操作
+A。倒满A
+B,倒满B
A>B,A倒到B,若B会溢出则剩余留在A否则全部倒给B
B>A,B倒到A,若A会溢出则剩余留在B否则全部倒给A
-A, 清空A
-B;清空B
样例3 5 4
输出操作路径

    考试时脑子短路使用了DFS每个节点对6个操作搜索,然后发现会出现循环倒水问题,所以限制了深度,只限制了20,样例能过,测试发现对于1 1000 999 这种A往B一杯杯倒水,就会超过深度限制。
    搜了下查看原题为POJ3414和POJ1606 https://blog.csdn.net/tigerisland45/article/details/52208174.因该使用BFS,这样还能输出最短路,对于dfs考试时有想到迭代加深搜索,但是题目没写求最小的倒水路径,考虑这种公司题目不会出太难,直接限制深度20,在指定深度里面找最短的倒水解。现在想一下20设置有点小,不知道能不能过。想当年这种题目也是刷过的水题,现在脑回路只剩下dfs+剪枝优化了,都忘了用BFS了。
    现在三个小时做三道题,感觉时间特别紧张,水平一直在走下坡路。考试前还是要刷题练一下,有些东西用过丢了就再也找不回来了。ACM从入门到忘记(~-~),刷题博客荒废了多年,真是感慨万千,今天考试的coding能力都是大学时候打下的基础都过了4,5年了。确实丢的差不多了。该补补了。


你可能感兴趣的:(札记)