韩信点兵(python)

文章讲述了韩信点兵的故事,通过编程演示了两种方法求解士兵总数:一是直接根据给定条件筛选,二是利用孙子算经原理计算公倍数。两种方法都展示了如何利用余数规则找出特定范围内的符合条件的士兵人数。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

'''
韩信点兵的算法如下:他让部下按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)

于是形成代码一:

print('------------------------韩信点兵------------------------')
print("请输入第一组被除数与余数(用空格隔开):")
a,i = map(int,input().split())
print("请输入第二组被除数与余数(用空格隔开):")
b,j = map(int,input().split())
print("请输入第三组被除数与余数(用空格隔开):")
c,k = map(int,input().split())
print("请输入该数的范围:")
n,m = map(int,input().split())

for l in range(n,m):
    if l%a==i and l%b==j and l%c==k:
        print(l)

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

print('------------------------韩信点兵------------------------')
print("请输入第一组被除数与余数(用空格隔开):")
a,i = map(int,input().split())
print("请输入第二组被除数与余数(用空格隔开):")
b,j = map(int,input().split())
print("请输入第三组被除数与余数(用空格隔开):")
c,k = map(int,input().split())
print("请输入该数的范围:")
n,m = map(int,input().split())

x1=x2=x3 = 1                         #表示倍数
s4 = a*b*c                    #三个被除数的公倍数
s1=s2=s3 = 1                  #每项的结果
t1=t2=t3 = False              #用于判断余数是否为1

while True:                   #计算出每一项中的倍数x1,x2,x3
	t1 = (b*c*x1) % a == 1
	t2 = (a*b*x2) % c == 1
	t3 = (a*c*x3) % b == 1
	if(not t1):
		x1+=1
	if(not t2):
		x2+=1
	if(not t3):
		x3+=1
	if(t1 and t2 and t3):
		break

s1 = (b*c*x1) * i       #第一项的结果
s2 = (a*b*x2) * k       #第二项的结果
s3 = (a*c*x3) * j       #第三项的结果
# print(s1,s2,s3,s4)

s = s1+s2+s3            #s为计算的最终结果
print("该数为:",end=' ')

while True:             #判断该数是否在(n,m)范围里,如果不再通过加减若干次的公倍数,使其处于范围里
	if(s>n and s<m):
		print(s)
		break
	elif(s<n):
		s=s+s4           #如果小于下界,则加上公倍数,直到不小于
	elif(s>m):
		s=s-s4 			 #如果大于上界,则减去公倍数,直到不大于
	elif(s==n or s==m):
		print(s)
		break

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

席子哥哥的代码库

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值