当前位置: 首页 > news >正文

Python趣味算法:借书方案知多少 | 排列组合穷举法详解

关键词:Python算法、排列组合、穷举法、循环优化、算法思维

看在每天坚持分享有趣知识的份上,点个关注吧(づ ̄ 3 ̄)づ

关注是我更新的动力 ̄︶ ̄∗ ̄︶ ̄∗)

作者会分享更多涉及到各种编程语言的有趣知识!(^∀^●)ノシ 

目录

问题描述

数学本质

算法设计:三重循环穷举法

核心思路

循环三要素解析

 完整实现代码

运行结果 

算法优化:提前终止无效循环

性能分析

优化思路

优化后完整代码

优化效果对比

算法思维扩展

1. 排列问题通用解法

2. 组合问题解法(不考虑顺序) 

3. 使用itertools库实现 

常见问题解答

Q1:为什么使用三重循环而不是两重?

Q2:如何验证结果是正确的?

Q3:如果允许重复借书(书可重复选择)怎么办?

Q4:当书籍数量很大时如何优化?

总结与思考

版权声明:本文代码原创部分由CSDN博主「坐路边等朋友」提供,技术解析部分原创,转载请注明出处。  


问题描述

小明有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

算法设计:三重循环穷举法

核心思路

  1. 使用三重嵌套循环分别表示A、B、C三人的选择

  2. 每层循环范围1-5(5本书)

  3. 添加条件判断确保三人选择互不相同

  4. 计数器统计有效方案数量

循环三要素解析

循环变量

初值

终止条件

增量操作

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 = 0print("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    
http://www.dtcms.com/a/289577.html

相关文章:

  • DeepSeek+LoRA微调大模型实战
  • 【机器学习深度学习】魔塔社区模型后缀全解析:Base、Chat、Instruct、Bit、Distill背后的技术密码
  • 【Java多线程-----复习】
  • InfluxDB 核心概念与发展历程全景解读(二)
  • AtCoder Beginner Contest 415
  • 数控调压BUCK电路 —— 基于TPS56637(TI)
  • 乐观锁实现原理笔记
  • Android activity与service通信的三种方法
  • 30天打牢数模基础-K均值聚类
  • (DINO)Emerging Properties in Self-Supervised Vision Transformers论文精读(逐段解析)
  • (苍穹外卖)暑假学习理解P2
  • 从零搭建智能搜索代理:LangGraph + 实时搜索 + PDF导出完整项目实战
  • [C/C++安全编程]_[中级]_[如何安全使用循环语句]
  • k8s:离线部署存在的相关问题
  • 近期工作感想:职业规划篇
  • 【单片机外部中断实验修改动态数码管0-99】2022-5-22
  • Linux文件系统三要素:块划分、分区管理与inode结构解析
  • 本地部署开源离线内容浏览器 Kiwix 并实现外部访问( Windows 版本)
  • 【Java新特性】Java 21 新特性全解析
  • CSS面试题及详细答案140道之(121-140)
  • 快速理解LLM的temperature和top_p参数
  • 设备健康管理实施案例:从技术架构到落地效果的全栈解析
  • MCP实战案例|Trae2.0 一键创建旅行助手并一键部署EdgeOne
  • ARFoundation系列讲解 - 101 VisionPro 真机调试
  • Vue中组件的生命周期
  • 建筑墙壁损伤缺陷分割数据集labelme格式7820张20类别
  • Django ORM系统
  • [学习] Hilbert变换:从数学原理到物理意义的深度解析与仿真实验(完整实验代码)
  • 平安车管家|中国平安车管家入职测评16PF瑞文IQ测评答题攻略及真题题库
  • 嵌入式系统内核镜像相关(十七)