关键词:Python算法、排列组合、穷举法、循环优化、算法思维
看在每天坚持分享有趣知识的份上,点个关注吧(づ ̄ 3 ̄)づ
关注是我更新的动力 ̄︶ ̄∗ ̄︶ ̄∗)
作者会分享更多涉及到各种编程语言的有趣知识!(^∀^●)ノシ
目录
版权声明:本文代码原创部分由优快云博主「坐路边等朋友」提供,技术解析部分原创,转载请注明出处。
问题描述
小明有5本不同的新书(编号1-5),要借给A、B、C三位小朋友。每人每次只能借1本书,且一本书不能同时借给多人。问:有多少种不同的借书方案?
数学本质
从5个元素中取3个不同元素的排列问题,计算公式为:
# Python验证排列数公式
n = 5
k = 3
permutation = 1
for i in range(k):
permutation *= (n - i)
print(f"排列数计算结果:{permutation}种方案") # 输出:60
算法设计:三重循环穷举法
核心思路
-
使用三重嵌套循环分别表示A、B、C三人的选择
-
每层循环范围1-5(5本书)
-
添加条件判断确保三人选择互不相同
-
计数器统计有效方案数量
循环三要素解析
循环变量 |
初值 |
终止条件 |
增量操作 |
---|---|---|---|
a (A的选择) |
1 |
a <= 5 |
a += 1 |
b (B的选择) |
1 |
b <= 5 |
b += 1 |
c (C的选择) |
1 |
c <= 5 |
c += 1 |
完整实现代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author: 坐路边等朋友
# @desc: 借书方案穷举算法
if __name__ == "__main__":
# 初始化计数器
count = 0
print("A,B,C三人所选书号组合:")
# 三重循环遍历所有可能
for a in range(1, 6): # A的选择
for b in range(1, 6): # B的选择
for c in range(1, 6): # C的选择
# 确保三人选择互不相同
if a != b and a != c and b != c:
# 格式化输出
print(f"A:{a} B:{b} C:{c}", end='\t')
count += 1
# 每4组换行
if count % 4 == 0:
print()
# 输出统计结果
print("\n\n共有%d种有效借阅方法" % count)
运行结果
A:1 B:2 C:3