韩信点兵python

有一群士兵,火数不超过n。韩信将其按照一行3人排队,余2人:按照一行5人排队,余1火;按照一行7人排队,刚好排成若干行。编马程序 计算士兵的人数。
<提示:可以采用穷举法求解。当人数上限比较大时,会有多种结果,要求全列举出来〉

n = int(input())
for i in range(7,n+1,7):
    if i%3==2 and i%5==1:
        print(i)

题目说可以采用穷举法,但是没说一定要穷举,穷举是最笨的方法,这个问题可以直接解方程,代码如下

def _remainder(n, a):
    assert len(n) == len(a)
    n_len = len(n)
    N = 1
    for i in range(n_len):
        N *= n[i]
    result = 0
    for i in range(n_len):
        m = N // n[i]
        result += a[i] * m * pow(m, -1, n[i])
    return result % N

n = int(input("请输入士兵的最大人数 n:"))

n_list = [3, 5, 7]
a_list = [2, 1, 0]
for i in range(3):
    n_cur = n_list[i]
    if n < n_cur:
        n_list = n_list[:i]
        a_list = a_list[:i]
        break
    a_list[i] %= n_cur

soldiers = _remainder(n_list, a_list)
print("士兵的人数为:", soldiers)

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/1091961
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:1.Python就是一个能够帮你实现需求的工具,它更像是一把万能钥匙,决定用它来打开哪一扇门的,是你自己。
  • 除此之外, 这篇博客: python作业中的 19.有n个人围成一圈,顺序排号。 从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • n = 34
    arr = list(range(1,n+1))            # 所有人门外站成一队【a】,进门后依旧按序站好【b】
    count,a,b = 0,arr,[]
    # 开始解题
    while len(a+b)>1:                   # 循环直到只剩1人
        num,count=a.pop(0),count+1      # 排队进门,每进一人【a.pop】,按一下计数器
        if count%3!=0:b.append(num)     # 进门后依旧按序站好【b.append】,计数器逢3淘汰。
        if a==[]:a,b=b,[]               # 如果门外没人了【a=[]】,所有人重新到门外站好【a=b】
    print(a[0])