【面试题总结】第三篇


我的博客中有一个系列,叫做【面试题总结】,这是这个系列的第三篇博文。
这个系列会记录我曾经做过的面试题,每篇十道。随着以后我做的面试题越来越多,这个系列也会相应的持续更新下去。


第一题

题目描述

康师傅饮料公司最近推出一种新款饮料。
为了更好的促销,推出一项瓶盖换饮料,三个瓶盖可以兑换一瓶新的饮料。
如果小明买了 n 瓶饮料,计算一下它最多能喝到多少瓶。

输入描述

初始饮料数量

输出描述

总共能喝到的饮料数

示例 1

输入

9

输出

13

提示

9 个瓶盖可以换三个新饮料,三个饮料又可以换一瓶新的。
9 + 3 + 1 = 13

我的解答

class Solution:
    def changeDrank(self, numCap):
        def change(numCap):
            num_gai = numCap
            new_shui = num_gai // 3
            rest_gai = num_gai - new_shui * 3
            if (rest_gai + new_shui) >= 3:
                a = change(rest_gai + new_shui)
                new_shui += a
            total = new_shui
            return total
        return numCap + change(numCap)

if __name__ == "__main__":
    so = Solution()
    resu = so.changeDrank(9) # 13

第二题

题目描述

小 A 的高次方程

小 A 在做数学作业时看到了这样一个题目,求方程 $ x3+y4+z^5=k $ 的一组正整数解 (x, y, z)
小 A 实在做不出来这道题,于是他找你帮忙写一个程序来解决这个问题。
由于你希望小 A 的作业让他自己做,你只需要判断是否存在解即可。

输入描述

第一行一个正整数 T,表示数据组数;
对于每一组数据,每行输入一个正整数 k。
1 <= T <= 200, 1 <= k <= $ 10^{12} $。

输出描述

对于每一组数据,若解存在,输出一行 YES(不含引号),否则输出 NO(不含引号)。

示例 1

输入

3
3
25
2

输出

YES
YES
NO

提示

第一组数据,可以找到解 x = y = z = 1
第二组数据,可以找到解 x = 2, y = 2, z = 1
第三组数据,无法找到解。

我的解答

# 此题不会,答案不对
if __name__ == "__main__":
    from itertools import combinations_with_replacement as com
    nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    com_resu = list(com(nums, 3))
    num = int(input())
    result = []
    for i in range(num):
        is_add = "NO"
        value = int(input())
        for x, y, z in com_resu:
            pow_sum = pow(x, 3) + pow(y, 4) + pow(z, 5)
            if pow_sum == value:
                is_add = "YES"
                break
        result.append(is_add)
    print("\n".join(result))