line中的一些题
往年题:
- 逆波兰表达式:https://www.zhihu.com/question/41103160添加链接描述
- 8皇后问题:https://zhuanlan.zhihu.com/p/99209213
- 简单的替换密码:https://iowiki.com/cryptography_with_python/cryptography_with_python_simple_substitution_cipher.html
实习中遇到的一道题:
自己有问题的代码:
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:]))
思路:
- 首先,将列表argv的所有值转换为整数
-[start,end]是范围[l,r]
–m是可以选择的数字数量
–nums是列表n,可以选择的数字,单独拿出来方便使用 - 接下来,计算以num为单位的数字范围内的倍数,另存为列表结果
- 定义一个递归函数循环,计算所有可能的组合,然后以列表形式传递,当m为1时,递归结束并输出结果。
- end-start-loop的结果是末尾剩余的数字。