python穷举法循环经典案例:借书方法

简介: 小明有5本新书,要借给A、B、C三位小朋友,若每个人每次只能借一本书,则有多少种不同的有效借法?

一、问题描述

小明有5本新书,要借给A、B、C三位小朋友,若每个人每次只能借一本书,则有多少种不同的有效借法?

二、问题分析

  • 典型的排列组合问题;
  • 从5个数中提取出3个不同的排列组合的总数。

三、算法设计

  • 每个人所选的书号可以通过穷举法循环来实现;
  • 即从(1,2,3,4,5)的范围内内进行穷举;
  • 循环嵌套实现上述逻辑;
  • 限制条件:书号不能相同。

四、代码实现

1、原始代码

(1) 代码

# 用a、b、c分别表示三人所选的图书的编号
i = 0
print("A、B、C三人所选的书号分别为: ")
# 用来控制A借阅图书的编号
for a in range(1,6):
    # 用来控制B借阅图书的编号
    for b in range(1,6):
        # 用来控制C借阅图书的编号
        for c in range(1,6):
            if a!=b and a!=c and b!=c:
                print("A:%2d B:%2d C:%2d" %(a,b,c), end= '')
                i += 1
                if 1 % 4 == 0:
                    print()
print("共有%d种有效的借阅方法" % i)

(2) 运行结果


2、算法优化

  • 如果前面两个人所选的书号相同,那么无论第三个人所选的书号与前面两人相同与否都是无效的借阅方法。
  • 在执行第三个循环之前可以先判定前两个编号是否相同。

3、优化代码

(1) 代码

i = 0
print("A、B、C三人所选的书号分别为: ")
a = 1
while a <= 5:
    b = 1
    while b <= 5:
        c = 1
        while c <= 5:
            if a!=c and b!=c:  # 控制有效借阅组合
                print("A:%2d B:%2d C:%2d" %(a,b,c), end= '')
                i += 1
                if 1 % 4 == 0:
                    print()
            c += 1
        b += 1
    a += 1
print("共有%d种有效的借阅方法" % i)

(2) 运行结果

相关文章
|
1月前
|
测试技术 API Python
【10月更文挑战第1天】python知识点100篇系列(13)-几种方法让你的电脑一直在工作
【10月更文挑战第1天】 本文介绍了如何通过Python自动操作鼠标或键盘使电脑保持活跃状态,避免自动息屏。提供了三种方法:1) 使用PyAutoGUI,通过安装pip工具并执行`pip install pyautogui`安装,利用`moveRel()`方法定时移动鼠标;2) 使用Pymouse,通过`pip install pyuserinput`安装,采用`move()`方法移动鼠标绝对位置;3) 使用PyKeyboard,同样需安装pyuserinput,模拟键盘操作。文中推荐使用PyAutoGUI,因其功能丰富且文档详尽。
WK
|
20天前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
68 36
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
11种经典时间序列预测方法:理论、Python实现与应用
本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。
63 2
11种经典时间序列预测方法:理论、Python实现与应用
|
18天前
|
人工智能 Python
[oeasy]python039_for循环_循环遍历_循环变量
本文回顾了上一次的内容,介绍了小写和大写字母的序号范围,并通过 `range` 函数生成了 `for` 循环。重点讲解了 `range(start, stop)` 的使用方法,解释了为什么不会输出 `stop` 值,并通过示例展示了如何遍历小写和大写字母的序号。最后总结了 `range` 函数的结构和 `for` 循环的使用技巧。
29 4
|
24天前
|
Java 索引 Python
【10月更文挑战第19天】「Mac上学Python 30」基础篇11 - 高级循环技巧与应用
本篇将介绍更深入的循环应用与优化方法,重点放在高级技巧和场景实践。我们将讲解enumerate()与zip()的妙用、迭代器与生成器、并发循环以及性能优化技巧。这些内容将帮助您编写更高效、结构更合理的代码。
59 5
|
27天前
|
开发者 Python
Python中的魔法方法与运算符重载
在Python的奇妙世界里,魔法方法(Magic Methods)和运算符重载(Operator Overloading)是两个强大的特性,它们允许开发者以更自然、更直观的方式操作对象。本文将深入探讨这些概念,并通过实例展示如何利用它们来增强代码的可读性和表达力。
|
1月前
|
数据安全/隐私保护 Python
Python循环语句
【10月更文挑战第7天】
|
1月前
|
Linux Python
Python获得本机本地ip地址的方法
【10月更文挑战第8天】 socket模块包含了丰富的函数和方法,可以获取主机的ip地址,例如gethostbyname方法可以根据主机名获取ip地址,gethostbyname_ex方法可以获得本机所有ip地址列表,也可以使用netifaces模块获取网卡信息。
36 0
|
1月前
|
SQL 安全 数据库
Python防止SQL注入攻击的方法
Python防止SQL注入攻击的方法
51 0
|
1月前
|
Python
Python中tqdm模块的常用方法和示例
`tqdm` 是一个快速、可扩展的Python进度条库,适用于长循环中添加进度提示。通过封装迭代器 `tqdm(iterator)`,可以轻松实现进度显示。支持自定义描述、宽度及嵌套进度条,适用于多种迭代对象。在Jupyter notebook中,可自动调整显示效果。
35 0