vivo 2020春招编程题(绘图解锁+数字乘积+手机产量)python实现

1. 绘图解锁 ,

手机解锁图案问题,至少链接[m,n]个键
解锁图案中所有键不同
若当前连线经过某一点,则该点必须选中
求合理的连线方式的种类

参考:https://blog.csdn.net/weixin_43647540/article/details/106385826

class Solution:
    def __init__(self):
        self.count = 0

    def search(self, a, i, j, c, m, n):
        if c >= m:
            self.count += 1
        if c >= n:
            return
        # 一个点走向周围包含24种情况,构成5 * 5 矩阵
        for x in range(-i, 3-i):
            for y in range(-j, 3-j):
                # 将要访问的点位于棋盘内,且未被访问
                if a[i + x][j + y] == 0:
                    # 两点连线经过中间点时 需确认中间点已经被访问
                    if x % 2 or y % 2 or (~(x % 2) and ~(y % 2) and a[i + int(x / 2)][j + int(y / 2)] == 1):
                        a[i + x][j + y] = 1
                        self.search(a, i + x, j + y, c + 1, m, n)
                        a[i + x][j + y] = 0

    def solution(self, m, n):
        a = []
        for i in range(3):
            a_i = []
            for j in range(3):
                a_i.append(0)
            a.append(a_i)

        if m > n or n <= 0:
            return 0
        for a1 in range(3):
            for a2 in range(3):
                a[a1][a2] = 1
                self.search(a, a1, a2, 1, m, n)
                a[a1][a2] = 0
        return self.count


if __name__ == '__main__':
    count = 0
    s = Solution()
    print(s.solution(1, 2))

2. 数字乘积

计算m的数位之积等于n的数 例如: n = 36 m = 49

def solution(n):
    s = []
    # while n > 1:
    i = 9
    while i > 1:
        if n % i == 0:
            n = n / i
            s.append(i)
            i = 9
        else:
            i -= 1
    sum = 0
    for i in range(len(s)):
        sum = sum +s[i] * 10 ** i
    if n != 1:
        return -1
    else:
        return sum

3. 手机产量

统计手机产量
第一天能生成一台  2,3天生产2台, 4,5,6天生产3台
思路: 计算日期序列和
def solution(n):
    # write code here
    t = []
    i = 1
    sum = 0
    while n > 0:
        if n > i:
            n = n-i
            t.append(i)
            i += 1
        else:
            t.append(n)
            n = 0
    print(t)
    for index, value in enumerate(t):
        sum = sum + (index+1) * value
    return sum

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值