python-字符排列问题

题目描述
有 n 个字母,列出由该字母组成的字符串的全排列(相同的排列只计一次)。
输入格式
第一行输入是字母个数 n 。
接下来一行输入的是待排列的 n 个字母。
输出格式
计算出的 n 个字母的所有不同排列总数。
样例输入输出
样例输入
4
aacc
样例输出
6
数据范围
对于 100% 的数据,保证 1≤n≤201≤n≤20 。
来源/分类(难度系数:二星
搜索 排列

 


完整代码展示:
import math
a=int(input())
b=list(input())
c=[]
for i in range(0,len(b)):
      if b[i] not in c:
           c.append(b[i])
sum=1
for i in range(0,len(c)):
      d=b.count(c[i])
      sum*=math.factorial(d)
print(int(math.factorial(len(b))/sum))

import math
a=int(input())
b=list(input())
c=[]
for i in range(0,len(b)):if b[i] not in c:c.append(b[i])
sum=1
for i in range(0,len(c)):d=b.count(c[i])sum*=math.factorial(d)
print(int(math.factorial(len(b))/sum))

 


代码解释:
“import math ”,导入math库。
“a=int(input()) ”,导入用户的字符个数a。
“b=list(input()) “,导入用户的字符串,并将该字符串分解为单字符储存在列表b中。
“c=[]
 for i in range(0,len(b)):
       if b[i] not in c:
            c.append(b[i])  ”,建立一个空列表c,接着遍历b中元素,判断b[i]是否在c中,如果不在:则将b[i]添加进c中。
“sum=1
 for i in range(0,len(c)):
       d=b.count(c[i])
       sum*=math.factorial(d) ”,令sum为1,利用factorial()函数计算b中每种元素的数量的阶乘。接着令sum乘以该阶乘。
“print(int(math.factorial(len(b))/sum)) ”,打印列表b长度的阶乘除以sum,并将结果转换为整数型。

 

数学背景:
排列组合的数学原理主要基于两个基本计数原理:加法原理和乘法原理。这些原理是理解和计算排列组合问题的基础。

加法原理:当完成某件事情存在多种互不重叠的方法时,将每种方法的结果相加即得到总的方法数。例如,从A地到B地,可以选择火车、汽车或飞机,每种交通方式各有不同的方法数,因此总的方法数是这几种交通方式方法数的和。
乘法原理:当完成某件事情需要多个步骤,每个步骤又有多种方法时,将每个步骤的方法数相乘即得到总的方法数。例如,从A地到B地,如果需要先从A地到C地,再从C地到B地,那么从A地到B地的方法数是这两个步骤方法数的乘积。
排列(permutation)和组合(combination)是两种基本的排列组合类型,它们在数学和日常生活中都有广泛的应用。

排列:从n个不同元素中取出m个元素(m≤n),按照一定的顺序排成一列,称为从n个元素中取出m个元素的排列。排列种数记作 P(n,m)P(n, m)P(n,m) 。例如,从1到5这五个数字中取出3个数字,按照从小到大的顺序排列,共有6种排列方式。
组合:从n个不同元素中取出m个元素(m≤n),不考虑元素的顺序,称为从n个元素中取出m个元素的组合。组合种数记作 C(n,m)C(n, m)C(n,m) 。例如,从1到5这五个数字中取出3个数字,不考虑顺序,共有10种组合方式。

计算公式:

f0cc56ed2e78411f8b6e62aca62f8e59.jpg

 

运行效果展示:

5210aee93a73406ebe7d2d86e637ae97.jpg
        
b745ed54c1d14bb8beec77ecfff86ed8.jpg        
               (声明:以上内容均为原创)

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143401.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java项目实战II基于Java+Spring Boot+MySQL的大学城水电管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 前随着高等…

12.Java基础概念-面向对象-static

欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words! 一、static关键字的含义…

【JVM】垃圾回收机制|死亡对象的判断算法|垃圾回收算法

目录 1.找到谁是垃圾 1)引用计数(不是JVM采取的方式,而是Python/PHP的方案) 2)可达性分析(是JVM采用的方案) 2.释放对应的内存的策略 1)标记-清除(并不实用&#xf…

Kubeadm init报错[ERROR CRI]: container runtime is not running: output:解决方案

报错详细信息: error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR CRI]: container runtime is not running: output: time"2024-09-17T17:25:3108:00" levelfatal msg"validate service connection: CRI v…

Docker 系列完结

经过这 3~5 天的学习,相信大家都对 Docker 有了一定的了解,希望同学们在学习的过程中一定要动手做一遍,融会贯通。 但技术学习,永无止境。下一步,我们可以开始学习 K8s 了。在介绍它之前,我们先介绍下微服…

【零基础速领】全套AI大模型入门指南(学习路线+PDF文档+面试)

已经有越来越多的人开始认识到学习AI的重要性了!可能是自主的认知,也可能是被身边的人卷的。总之,可能已经没有人不知道人工智能这个概念了,可能人人都已知道ChatGPT了,哪怕他没有用过。 ChatGPT发布后,很…

新书推荐 | Windows server 2022活动目录管理实践(微课版)

掌握 Windows Server 2022 活动目录核心技术:从新手到专家的实战指南 (书籍封面) 书籍介绍 本书专为社会各界专业人士量身打造,深入剖析了 Windows Server 2022 活动目录的核心技术精髓与业界最佳实践策略。它紧密围绕活动目录配…

DevExpress WinForms v24.1新版亮点:升级的HTML CSS支持

DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…

下载Kafka 3.0.0教程

1、Kafka 3.0.0下载地址 Apache Kafka 2、往下拉,查找3.0.0版本点击下载

一款开源的Windows系统优化工具Dism++

下载地址:Release Dism 10.1.1002.2 Chuyu-Team/Dism-Multi-language GitHub 下载解压到文件,现在基本都是64位的操作系统了,就直接打开Dismx64.exe即可使用。 部分功能截图一览: 给刚装的系统处理一些优化还是什么方便的&#…

Keysight 是德E4990A Agilent E4991A阻抗分析仪

Keysight 是德E4990A Agilent E4991A阻抗分析仪 主要特性与技术指标5 种频率选件;20 Hz 至 10/20/30/50/120 MHz,可升级0.08%(0.045% 典型值)基本阻抗测量精度25 m? 至 40 M? 宽阻抗测量范围(10% 测量精度范围&…

安泰功率放大器在超声行业中的应用有哪些

超声技术是一种在医疗、工业、科学等领域广泛应用的非侵入性、高分辨率的检测和成像技术。功率放大器在超声领域中扮演着至关重要的角色,它们不仅仅是信号的增强器,更是推动超声技术发展的关键组件。下面西安安泰电子官网将深入介绍功率放大器在超声行业…

Leading SAFe规模化大规模敏捷认证

在当今瞬息万变的商业环境中,Scrum敏捷已经成为企业转型、提升竞争力的关键战略之一。然而,如何有效地将敏捷应用于大规模组织中,推动企业级的业务敏捷转型?这是许多领导者正在面临的挑战。Leading SAFe 规模化敏捷领导者业务敏捷…

【踩坑】Gradle依赖下载问题解决:stributions/gradle-8.10-bin.zip failed: timeout (10000ms)

在构建项目时,Gradle 默认会从 https://services.gradle.org/distributions/ 下载对应版本的 Gradle 包。由于网络问题,这个过程可能非常缓慢,甚至会出现下载失败的情况。为了解决这一问题,我将 gradle-wrapper.properties 文件中…

我的AI工具箱Tauri版-MoYin文本转语音

本教程基于自研的AI工具箱Tauri版进行MoYinTTS文本转语音服务。 进入软件后可以直接搜索 MoYinTTS 或者依次点击 Python音频技术/音频tools 进入该模块。 进入模块之后需要进行基础角色配置。 使用方法,依次选择文件路径输入和输出路径,然后点击保存配置…

直流斩波电路

目录 1. 降压斩波电路(Buck Converter) 2. 升压斩波电路(Boost Converter) 3. 升降压斩波电路(Buck-Boost Converter) 4. Cuk斩波电路(Cuk Converter) 直流斩波电路是一种将直流…

Linux上Qt安装相关的内容及在QtCreator使用QChart模块需要的配置

引言 下面是Ubuntu上Qt安装相关的内容及在QtCreator使用QChart模块需要的配置。 关于Qt安装及环境 Qt的模块 查看已经安装的模块 sudo apt search qt5-安装新的模块 sudo apt install qt5-svg # 安装Qt SVG模块3.查看qt已经安装了哪些模块 dpkg -l | grep libqt安装qt,…

从零到一,监控网关上网设置教程

要让监控网关成功连接互联网,需要正确配置网络设置。监控网关通常位于本地局域网(LAN)或广域网(WAN)中,用于连接摄像头、传感器等监控设备,并通过网络上传数据到远程服务器或云平台。以下是监控…

C++ List (带你一篇文章搞定C++中的List类)

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 数据结构习题_LaNzikinh篮子的博客-CSDN博客 初阶数据结构_LaNzikinh篮子的博客-CSDN博客 收入专栏:C_LaNzikinh篮子的博客-CSDN博客 其他专…

9.1 溪降技术:游泳

目录 9.1 游泳概述观看视频课程电子书:游泳防御性游泳姿势**身体姿势** 积极游泳姿势**身体姿势** 总结 9.1 游泳 概述 深潭游泳 对于峡谷探险者来说,游泳是一项核心技能。我们的游泳水平和自信心将在很大程度上决定我们的路线选择。在这一阶段&#xff…