'''
韩信点兵
全部士兵按每行8人站立,剩余7人
全部士兵按每行7人站立,剩余6人
问题:已知每一营士兵人数在1000~2000之间,如何利用循环+判断表示出代码逻辑
'''for num in range (1000,2000):if num % 8==7 and num %7==6 and num%6==5\and num%5==4:print(num)break'''
满编一部400人,才编下一部 1679
鱼鳞阵首排一人,次排2人
中间鱼肚部分人数最多
然后依次递减,末排仍是1人
'''
army=num%400 #79'''
*
**
***
**
*
1
1+1 [1] [1]
1+2+1 [1,2] [1]
1+2+2+1 [1,2] [1,2]
'''# n=1 #排数
# num =0 #总人数
# while num<=79:
# fit_num=num #要的是循环结束前的上一个值(因为最后跳出时的num是不符合题意的)
# upper=sum([i+1 for i in range(n//2+1)])
# lower=sum([i+1 for i in range (n//2)])
# num=upper+lower
# n=n+1
# print('鱼鳞阵由%d排构成,一共使用了兵员%d人'%(n-1,fit_num))n = 1
num = 0
while num <= 79:fit_num = numnum=0if n % 2 == 0:for i in range(n // 2 + 1):print('*' * i)num+=ifor i in range(n // 2 + 1):print('*' * (n // 2 - i)) #下三角num+=n//2-ielse:for i in range(n // 2 + 2): #从1改为2:因为想使值大一些,体现出上三角4行,下三角3行print('*' * i)num+=ifor i in range(n // 2): #下三角行数少一行print('*' * (n // 2 - i))num+=n//2-in=n+1
print('鱼鳞阵一共有%d排,共用了%d人' % (n-1, fit_num))
输出结果: