100个python算法超详细讲解:旅客国籍

2024-01-14 16:30

本文主要是介绍100个python算法超详细讲解:旅客国籍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【100个python算法超详细讲解】@谷哥技术

1.问题描述
在一个旅馆中住着6个不同国籍的人,他们分别来自美国、德国、英
国、法国、俄罗斯和意大利。他们的名字分别叫A、B、C、D、E和F,要说
明的是名字的顺序与前面提到的国籍不一定是相互对应的。现在已知:
1)A和美国人是医生。
2)E和俄罗斯人是教师。
3)C和德国人是技师。
4)B和F曾经当过兵,而德国人从未参过军。
5)法国人比A年龄大,意大利人比C年龄大。
6)B同美国人下周要去西安旅行,而C同法国人下周要去杭州度假。
现要求根据上述已知条件,编程求出A、B、C、D、E和F各是哪国人。
2.问题分析
根据问题描述中给定的条件可进行如下分析:
·由“A和美国人是医生”可知A不是美国人。
·由“E和俄罗斯人是教师”可知E不是俄罗斯人。
·由“C和德国人是技师”可知C不是德国人。
·又因为A的职业是医生,与俄罗斯人和德国人的职业不同,故A不是俄
罗斯人也不是德国人。E的职业是教师,与美国人和德国人的职业不同,故E
不是美国人也不是德国人。C的职业是技师,与美国人和俄罗斯人不同,故C
不是美国人也不是俄罗斯人。
·由“B和F曾经当过兵,而德国人从未参过军”可知,B和F不是德国人。
·由“法国人比A年龄大,意大利人比C年龄大”可知,A不是法国人,C不
是意大利人。
·由“B同美国人下周要去西安旅行,而C同法国人下周要去杭州度假”可
知,B不是美国人,也不是法国人,C不是法国人。
用条件矩阵将上面的分析结果表示出来:

根据上面的条件矩阵使用消去法,即可得到问题的结果。
3.算法设计
下面给出从条件矩阵初始化到完成消去得到结果的整个过程中条件矩阵
每一步的变化,矩阵中加粗的元素表示在该步骤中该元素发生了变化。具体
变化过程如下:
1)初始化条件矩阵。

 

 2)将问题分析中得出的结果在条件矩阵中表示出来。

 条件矩阵中为0的项表示不是该国的人,同时将条件矩阵中每一列的0号
元素都置为1,用来表示该列尚未进行处理。
3)第4列只有一个元素为0,执行消去操作。
执行消去操作时从只有一个元素为非0的列开始消去。

 将条件矩阵中非零元素所在行的其他元素都置为0,同时置a[0][4]为0,
表示条件矩阵中第4列已处理完毕。
4)第1列只有一个元素为0,执行消去操作。
显然,当条件矩阵位于状态(c)时,第1列中只有一个元素非0,可执
行消去操作。

5)第3列只有一个元素为0,执行消去操作。
显然,当条件矩阵位于状态(d)时,第3列中只有一个元素非0,可执
行消去操作。

 

6)第6列只有一个元素为0,执行消去操作。
显然,当条件矩阵位于状态(e)时,第6列中只有一个元素非0,可执
行消去操作。

 

7)第5列只有一个元素为0,执行消去操作。
显然,当条件矩阵位于状态(f)时,第5列中只有一个元素非0,可执行
消去操作。

 

8)第2列只有一个元素为0,执行消去操作。
当条件矩阵位于状态(g)时,只有第2列还未被处理,经观察发现,该
非零元素所在行(第3行)的所有其他元素都已经为0了,但在我们编程实现
时,程序还是会对该行的每个元素都检查一遍。 

执行消去操作后的矩阵状态为状态(h)所示。该矩阵中除了第0列以外
每列都只有一个元素非0,由此就可推断出A、B、C、D、E、F到底是哪国
人。
4.确定程序框架
总结上述矩阵状态的变化过程,可得出程序执行的简要流程,如图6.9所
示。 

5.完整的程序
根据上面的分析,编写程序如下:

#!/usr/bin/python3
# -*- coding: ?TF-8 -*-
#author:liuhefei
#desc: 旅客国籍
country = [" ", "美国", "英国", "法国", "德国", "意大利", "俄罗斯"] #国名
def Nationality():
#初始化条件矩阵
a = []
for i in range(7):
b = []
for j in range(7):
b.append(j)
a.append(b)
for i in range(1, 7): #条件矩阵每一列的第0号元素作为该列数据处理的标记
a[0][i] = 1 #标记该列尚未处理
a[1][1] = a[2][1] = a[3][1] = a[5][1] = 0 #输入条件矩阵中的各种条件
a[1][3] = a[2][3] = a[3][3] = 0 #0表示不是该国人
a[1][4] = a[2][4] = a[3][4] = a[5][4] = a[6][4] = 0
a[3][5] = 0
a[1][6] = a[3][6] = a[5][6] = 0
x = 0
y = 0
while a[0][1] + a[0][2] + a[0][3] + a[0][4] + a[0][5] + a[0][6] > 0:
#当所有6列均处理完毕后退出循环
for i in range(1, 7): #i为列坐标
if a[0][i] != 0: #若该列尚未处理,则进行处理
e = 0
for j in range(1, 7): #j变量保存行坐标,e变量是该列中非0元素的计数器
if a[j][i] != 0:
#统计每列中的非0元素个数
x = j #x变量保存行坐标
y = i #y变量保存列坐标
e += 1
if e == 1: #若该列只有一个元素为非零,则进行消去操作
for t in range(1, 7):
if t != i:
a[x][t] = 0 #将非零元素所在行的其他元素置0
a[0][y] = 0 #设置该列已处理完毕的标记
print("矩阵最终状态为:")
#输出执行消去操作后矩阵的最终状态
for i in range(7):
print(a[i])
print("推断结果为:")
for i in range(1, 7):
print(chr(ord('A') - 1 + i), '来自: ', end='')
for j in range(1, 7):
if a[i][j] != 0:
print(country[a[i][j]], '。')
break
if __name__ == '__main__':
Nationality()

 6.运行结果
在PyCharm下运行程序,结果如图6.10所示。根据运行结果可知:A是意
大利人,B是俄罗斯人,C是英国人,D是德国人,E是法国人,F是美国人。

 7.拓展训练
根据题意生成条件矩阵,再使用消去法进行推理判断是一种常用的方
法,该方法对于解决较为复杂的逻辑问题是十分有效的,希望读者能够掌
握。

这篇关于100个python算法超详细讲解:旅客国籍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/605793

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre