相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答曰,每3人一列余2人、5人一列余3人、7人一列余2人。刘邦茫然而不知其数,你知其数吗?
图形化问题
公式化问题
总人数(被除数) | 人/列(除数) | 列(未知数) | 余(余数) | 表达式 |
---|---|---|---|---|
? | 3 | x | 2 | 3x+2 |
5 | y | 3 | 5y+3 | |
7 | z | 2 | 7z+2 | |
3x + 2 = 5y + 3 = 7z + 2 |
采用枚举法,初步探索此公式可能的解:
.
.
.
编程算法实现
def caculate_soldiers(limit = 100):
amount = []
soldiers = limit
while soldiers > 0:
if soldiers%3 == 2 and soldiers%5 == 3 and soldiers%7 == 2:
amount.append(soldiers)
soldiers -= 1
print('\nWhen total number limit to %d soldiers count:\n' % limit)
index = 0
text = ''
while index < len(amount):
text += str(amount[index]) + '\t\t'
if (index+1) % 5 == 0:
print(text)
text = ''
index += 1
print(text + '\n')
不同的士兵总数
执行此函数:
#!/usr/bin/env python
# encoding: utf-8
if __name__ == '__main__':
limits = [100, 1000, 10000]
for limit in limits:
caculate_soldiers(limit)
输出结果
When total number limit to 100 soldiers count:
23
When total number limit to 1000 soldiers count:
968 863 758 653 548
443 338 233 128 23