当前位置:   article > 正文

韩信点兵(python)_韩信点兵python

韩信点兵python
'''
韩信点兵的算法如下:他让部下按1-3,1-5,1-7报数,并用每次报数的余数计算士兵总数,一次集合中,1-3报数余2,1-5报数余3,1-7报数余2,已知他们队伍人数在900—1000人之间。
编程求出当天到的士兵数。
'''

for i in range(900,1000):
    if i%3==2 and i%5==3 and i%7==2:
        print(i)
'''淮安民间传说着一则故事——“韩信点兵”,其次有成语“韩信点兵,多多益善”。
韩信带1500名兵士打仗,战死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。韩信很快说出人数:1049。
'''
for i in range(1000,1100):
    if i%3==2 and i%5==4 and i%7==6:
        print(i)

于是形成代码一

  1. print('------------------------韩信点兵------------------------')
  2. print("请输入第一组被除数与余数(用空格隔开):")
  3. a,i = map(int,input().split())
  4. print("请输入第二组被除数与余数(用空格隔开):")
  5. b,j = map(int,input().split())
  6. print("请输入第三组被除数与余数(用空格隔开):")
  7. c,k = map(int,input().split())
  8. print("请输入该数的范围:")
  9. n,m = map(int,input().split())
  10. for l in range(n,m):
  11. if l%a==i and l%b==j and l%c==k:
  12. print(l)

根据孙子算经解法,生成代码二:

  1. print('------------------------韩信点兵------------------------')
  2. print("请输入第一组被除数与余数(用空格隔开):")
  3. a,i = map(int,input().split())
  4. print("请输入第二组被除数与余数(用空格隔开):")
  5. b,j = map(int,input().split())
  6. print("请输入第三组被除数与余数(用空格隔开):")
  7. c,k = map(int,input().split())
  8. print("请输入该数的范围:")
  9. n,m = map(int,input().split())
  10. x1=x2=x3 = 1 #表示倍数
  11. s4 = a*b*c #三个被除数的公倍数
  12. s1=s2=s3 = 1 #每项的结果
  13. t1=t2=t3 = False #用于判断余数是否为1
  14. while True: #计算出每一项中的倍数x1,x2,x3
  15. t1 = (b*c*x1) % a == 1
  16. t2 = (a*b*x2) % c == 1
  17. t3 = (a*c*x3) % b == 1
  18. if(not t1):
  19. x1+=1
  20. if(not t2):
  21. x2+=1
  22. if(not t3):
  23. x3+=1
  24. if(t1 and t2 and t3):
  25. break
  26. s1 = (b*c*x1) * i #第一项的结果
  27. s2 = (a*b*x2) * k #第二项的结果
  28. s3 = (a*c*x3) * j #第三项的结果
  29. # print(s1,s2,s3,s4)
  30. s = s1+s2+s3 #s为计算的最终结果
  31. print("该数为:",end=' ')
  32. while True: #判断该数是否在(n,m)范围里,如果不再通过加减若干次的公倍数,使其处于范围里
  33. if(s>n and s<m):
  34. print(s)
  35. break
  36. elif(s<n):
  37. s=s+s4 #如果小于下界,则加上公倍数,直到不小于
  38. elif(s>m):
  39. s=s-s4 #如果大于上界,则减去公倍数,直到不大于
  40. elif(s==n or s==m):
  41. print(s)
  42. break

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号