小米软件开发岗2021.09.01笔试记录

一共3个部分,第一部分是单选题,第二部分是多选题,第三部分是编程题
选择题大部分考操作系统和Linux知识,没复习,不会做

单选题第一题感觉出的有问题,没有正确答案,题目如下:

选项:

我计算出来的答案是 031556。什么情况

编程题

1、两个有序数组合并

题目描述:
有A、B两个有序数组,将B合并到A中。合并之后输出结果,以空格隔开
说明:
(1)初始化A和B的元素数量分别为m和n
(2)A有足够的空间来保存B中的元素
(3)默认升序

代码:

2、最后剩下的数字

题目描述:
给定一个从1到n的整数列表,从第一个数字开始计数,遇到3的倍数时,将该数从列表中删除,直至列表末尾。
在剩下的数字中,从第一个数字开始,继续之前的计数值,同样遇到3的倍数时,删除该数。
循环上面的步骤,直到列表中只剩下一个数字。
根据指定的数字n,来判断最后剩下的数字是哪个。

输入描述

输出描述:

注:这题是经典约瑟夫问题,之前没做过这种题。我做题的时候没有看懂题意。下面是我的理解:
(1)看完题目,我以为第一步走完后,第二步接着从下标0位置开始往后计数
(2)看完输入后,我以为第二步要先删除下标0位置,之后再往后计数
而题目中说了,第二步,继续之前的计数,意思是,第一步走完后,从最后一个删除的位置开始计数,依次再往后计数(循环计数)

真是佩服自己的理解能力

这道题我做完之后很明显不能全部通过。下面给出正确解题过程:
(1)我们将上述问题建模为函数 f(n, m)
(2)首先,长度为 n 的序列会先删除第 m % n 个元素,然后剩下一个长度为 n – 1 的序列。那么,我们可以递归地求解 f(n – 1, m),就可以知道对于剩下的 n – 1 个元素,最终会留下第几个元素,我们设答案为 x = f(n – 1, m)。
(3)由于我们删除了第 m % n 个元素,将序列的长度变为 n – 1。当我们知道了 f(n – 1, m) 对应的答案 x 之后,我们也就可以知道,长度为 n 的序列最后一个删除的元素,应当是从 m % n 开始数的第 x 个元素。因此有 f(n, m) = (m % n + x) % n = (m + x) % n。

代码如下:

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树桌面应用开发Tkinter212927 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年8月1日
下一篇 2021年8月1日

相关推荐