line中的一些题

line中的一些题

往年题:

  1. 逆波兰表达式:https://www.zhihu.com/question/41103160添加链接描述
  2. 8皇后问题:https://zhuanlan.zhihu.com/p/99209213
  3. 简单的替换密码:https://iowiki.com/cryptography_with_python/cryptography_with_python_simple_substitution_cipher.html

实习中遇到的一道题:
line中的一些题
line中的一些题
line中的一些题
自己有问题的代码:

import sys

def main(argv):
    # このコードは引数と標準出力を用いたサンプルコードです。
    # このコードは好きなように編集・削除してもらって構いません。
    # ---
    # This is a sample code to use arguments and outputs.
    # Edit and remove this code as you like.
    argv = [int(i) for i in argv]
    start = argv[0]
    end = argv[1]
    m = argv[2]

    nums = argv[3:]
    length = end - start + 1
    result = [0]*len(nums)
    for k in range(len(nums)):
        k1 = start//nums[k]
        k2 = end//nums[k]
        result[k] = k2-k1
    return length-loop(m, result, nums, start, end)
        
def loop(m, result, nums, start, end):
    if m == 1:
        return max(result)
    else:
        m -= 1
        list1 = []
        for i in range(len(result)):
            for j in range(i+1, len(result)):
                a = end//(nums[i]*nums[j])
                b = start//(nums[i]*nums[j])
                list1.append(result[i] + result[j] - a+b)
        return loop(m, list1) 
        
   
      
if __name__ == '__main__':
    print(main(sys.argv[1:]))


思路:

  1. 首先,将列表argv的所有值转换为整数
    -[start,end]是范围[l,r]
    –m是可以选择的数字数量
    –nums是列表n,可以选择的数字,单独拿出来方便使用
  2. 接下来,计算以num为单位的数字范围内的倍数,另存为列表结果
  3. 定义一个递归函数循环,计算所有可能的组合,然后以列表形式传递,当m为1时,递归结束并输出结果。
  4. end-start-loop的结果是末尾剩余的数字。
上一篇:qt中文乱码解决方案


下一篇:初识编程 | 论如何优雅地学习C语言之命令行参数