笔试题分享

1)分享一道京东的笔试题:
题目描述
小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。现在对于一个数字x,小明同学定义出了两个函数f(x)和g(x)。 f(x)表示把x这个数用十进制写出后各个数位上的数字之和。如f(123)=1+2+3=6。 g(x)表示把x这个数用二进制写出后各个数位上的数字之和。如123的二进制表示为1111011,那么,g(123)=1+1+1+1+0+1+1=6。 小明同学发现对于一些正整数x满足f(x)=g(x),他把这种数称为幸运数,现在他想知道,小于等于n的幸运数有多少个?
输入描述:

每组数据输入一个数n(n<=100000)

输出描述:

每组数据输出一行,小于等于n的幸运数个数。

示例1
输入

21

输出

3

思路:挺简单的一道题,中心思想就是对十进制和二进制分别取余数相加,最后判断是否相等。

def fg(x,i):
    s = 0
    while (x >= 1):
        s += x % i
        x = int(x/i)
    return s

n = int(input())
num = 0
for i in range(1,n+1):
    if fg(i,10) == fg(i,2):
        num += 1
print (num)

保存取余过程中的各个余数,逆序读出,即可进行任何进制的转换。

参考:牛客网编程题

2)分享美团点评的一道笔试题:
题目描述
现在有一个数组,其值为从1到10000的连续增长的数字。出于某次偶然操作,导致这个数组中丢失了某三个元素,同时顺序被打乱,现在需要你用最快的方法找出丢失的这三个元素,并且将这三个元素根据从小到大重新拼接为一个新数字,计算其除以7的余数。 例:丢失的元素为336,10,8435,得到的新数字为103368435,除以七的余数为2。
输入描述:

输入数据为一行,包含9997个数字,空格隔开。

输出描述:

输出为一行,包含一个数字。

##解法1:排序后找到不连续的点并保存起来即可
n = list(map(int,input().split()))
n.sort()
d = []
x = 0
t = 1
for i in range(1,10001):
    if x == 3:
        break
    t = 1
    if (n[i+1]-n[i]>1):
        while ((n[i]+t>n[i]) & (n[i]+t<n[i+1])):
            d.append(n[i]+t)
            t += 1
            x += 1
d.sort()
dt = int(str(d[0]) + str(d[1]) + str(d[2]))%7
print (dt)
'''
##解法2:牛客网上看到的别人的解法,思路非常清晰
n = list(map(int,input().split()))
n.sort()
d = []
for i in range(1,10001):
    if n[0] == i:
        n.pop(0)
    else:
        d.append(i)
d.sort()
dt = int(str(d[0]) + str(d[1]) + str(d[2]))%7
print (dt)
'''

参考:牛客网编程题

3)
题目描述
有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。
输入描述:

输入包括一行,逗号隔开的两个正整数x和y,取值范围[1,10]。

输出描述:

输出包括一行,为走法的数目。

示例1
输入

3 2

输出

10

##逆推,推出每个点往前走有多少中走法,然后递归加起来就行了,注意第一行只能往左走,第一列只能往上走;
def get_way(m,n):
    if (m==0)&(n==0):
        return 0
    if (m==0)&(n!=0):
        return 1
    if (m!=0)&(n==0):
        return 1
    if (m!=0)&(n!=0):
        return get_way(m-1,n) + get_way(m,n-1)

x,y = map(int,input().split(' '))
s = get_way(x,y)
print (s)

参考:牛客网编程题

(4)提供leetcode上一道简单题:
Given a non-empty array of integers, every element appears twice except for one. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

Example 1:

Input: [2,2,1]
Output: 1

Example 2:

Input: [4,1,2,1,2]
Output: 4

我的解法:

class Solution:
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        single = []
        for n in nums:
            if n not in single:
                single.append(n)
            else:
                single.remove(n)
        return single[0]

能ac通过,但是实际上时间复杂度和空间复杂度并不符合要求。
提供一个很巧妙的解法(用异或的方法):
这里写图片描述
代码相当简洁:

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        a = 0
        for i in nums:
            a ^= i
        return a

完整链接附上:https://leetcode.com/articles/single-number/#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很高兴能够分享这些嵌入式软件工程师的笔试题,以下是题目和解答: 1. 下面哪个选项正确地描述了 volatile 关键字在 C 语言中的作用? A. 声明变量为 volatile 表示该变量只能被 const 类型的变量赋值 B. 声明变量为 volatile 表示该变量可以被随时修改,编译器不能对该变量进行优化 C. 声明变量为 volatile 表示该变量只能被函数调用修改 D. 声明变量为 volatile 表示该变量只能被同一文件中的函数调用修改 解答:B 2. 下列哪条语句可以正确打开一个文件? A. fopen("file.txt", "r"); B. open("file.txt", "r"); C. open_file("file.txt", "r"); D. fopen_file("file.txt", "r"); 解答:A 3. 下面哪个选项正确地描述了指针? A. 指针是一个数据类型,用于存储地址 B. 指针是一个函数,用于修改变量的值 C. 指针是一个变量,用于存储函数的返回值 D. 指针是一个数据类型,用于存储字符串 解答:A 4. 下列哪个选项正确地描述了嵌入式系统? A. 嵌入式系统是一种可以连接到互联网的计算机 B. 嵌入式系统是一种可以在桌面上运行的软件 C. 嵌入式系统是一种嵌入到其他备中的计算机系统 D. 嵌入式系统是一种可以运行多个应用程序的操作系统 解答:C 5. 下面哪个选项正确地描述了系统调用? A. 系统调用是一种用于访问硬件资源的编程接口 B. 系统调用是一种用于访问内存的编程接口 C. 系统调用是一种用于访问网络的编程接口 D. 系统调用是一种用于访问文件系统的编程接口 解答:D 希望这些题目和解答能够帮助到你,祝你成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值