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.rhkb.cn/news/426289.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript高级——闭包应用-自定义js模块

定义 JS 模块 具有特定功能的 js 文件将所有的数据和功能都封装在一个函数内部(私有的)只向外暴露一个包含n个方法的对象或函数模块的使用者,只需要通过模块暴露的对象调用方法来实现对应的功能 例子1: 例子2: 本文分享到这里&am…

软件开发项目,如何应对时间压力?

时间压力是软件开发项目中普遍存在的挑战,妥善应对此问题有助于优化资源配置,控制成本超支,提升团队士气与协作效率,进而增强软件项目的成功率,确保项目按时交付,并提升产品质量和客户满意度。如果无法处理…

『功能项目』事件中心处理怪物死亡【55】

本章项目成果展示 我们打开上一篇54回调函数处理死亡的项目, 本章要做的事情是用事件中心处理怪物死亡后的逻辑 首先打开之前事件中心脚本(不做更改,调用即可): using System.Collections.Generic; using UnityEngine…

QT程序的安装包制作教程

在Windows平台上开发完qt c桌面应用程序以后,需要制作一个安装包,方便生产和刻盘交货,本文记录相关流程。 目录 一、安装Qt Installer Framework 二、准备可执行程序 2.1 生成Release程序 2.2 完成依赖库拷贝 三、创建安装包程序 一、…

【MySQL】MySQL和Workbench版本兼容问题

1、安装MySQL WorkBench 最新版本下载:https://dev.mysql.com/downloads/workbench/ 历史版本下载:https://downloads.mysql.com/archives/workbench/ 2、问题描述 本人在Windows下安装了一个旧版本的MySQL(5.1),同…

【C++登堂入室】类与对象(上)

目录 一、面向过程和面向对象初步认识 二、类的引入 三、类的定义 四、类的访问限定符及封装 4.1 访问限定符 4.2 封装 五、类的作用域 六、类的实例化 七、类对象模型 7.1如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 八、this指针 …

物联网行业中小型嵌入式文件系统详解以及使用

一 概述 在嵌入式系统使用过程中,为了方便数据的存储,我们加入了串行的外部Flash(SPI通信)。在使用存储的时候,如需要记录一个字符串“奇迹物联Bloom OS”,我们可以把这些文字转化成 ASCII 码,存储在数组中&#xff0c…

Android Studio Menu制作

文章目录 一、创建菜单在Activity上新建onCreateOptionsMenu新建menu目录及资源文件新建Menu一级菜单在Activity上加载Menu测试效果 二、菜单点击事件 一、创建菜单 在Activity上新建onCreateOptionsMenu Overridepublic boolean onCreateOptionsMenu(Menu menu) {return supe…

Vue2电商平台项目 (三) Search模块、面包屑(页面自己跳自己)、排序、分页器!

文章目录 一、Search模块1、Search模块的api2、Vuex保存数据3、组件获取vuex数据并渲染(1)、分析请求数据的数据结构(2)、getters简化数据、渲染页面 4、Search模块根据不同的参数获取数据(1)、 派发actions的操作封装为函数(2)、设置带给服务器的参数(3)、Object.assign整理参…

【读论文】End-to-end reproducible AI pipelines in radiology using the cloud

文章目录 End-to-end reproducible AI pipelines in radiology using the cloud01 研究背景与目的医学成像领域(1)研究现状(2)存在问题 其他研究领域:基因组学(genomics)研究目的:提…

【数据库】MySQL-基础篇-事务

专栏文章索引:数据库 有问题可私聊:QQ:3375119339 目录 一、事务简介 二、事务操作 1.未控制事务 1.1 测试正常情况 1.2 测试异常情况 2.控制事务一 1.1 查看/设置事务提交方式 1.2 提交事务 1.3 回滚事务 3.控制事务二 1.1 开启事…

lvs-dr模式实验详解

华子目录 lvs-dr(企业当中最常用)dr模式数据逻辑dr模式数据传输过程dr模式的特点实验拓扑实验主机准备解决vip响应问题限制响应级别:arp_ignore限制通告级别:arp_announce 实验步骤1.client的ip设定2.router上的ip设定3.router开启路由转发功能4.lvs主机…

Eroded Mountains - Stamp Pack 山脉

这套邮票包含10幅高质量的高度图图像。这些邮票以严重侵蚀的山脉为特色,非常适合古代和史诗般的风景! 高品质邮票塑造您的地形! 每一个伟大的环境场景都始于一个空的平面。 这个邮票包包含10枚邮票,可以帮助你填补这个空白。这些邮票以严重侵蚀的山脉为特色,非常适合古代和…

C++:多态

目录 一.多态的概念 二.多态的定义及其实现 1.虚函数 2.虚函数的重写/覆盖 3.实现多态的条件 4.虚函数重写的例外 5.析构函数的重写 6.经典例题 7.C11 override和final关键字 8.重载、重写/覆盖、隐藏的区别 三.抽象类 四.多态的原理 1.虚函数表指针 2.多态如何实…

13 Midjourney从零到商用·实战篇:漫画设计一条龙

大家好,经过前面十三篇文章,相信大家已经对Midjourney的使用非常熟悉了,那么现在我们开始进行实际的项目操作啦,想想是不是有点小激动呀,本篇文章为大家带来Midjourney在漫画制作领域的使用流程,同样也适用于现在短视频…

[C语言]第十节 函数栈帧的创建和销毁一基础知识到高级技巧的全景探索

10.1. 什么是函数栈帧 我们在写 C 语言代码的时候,经常会把一个独立的功能抽象为函数,所以 C 程序是以函数为基本单位的。 那函数是如何调用的?函数的返回值又是如何待会的?函数参数是如何传递的?这些问题都和函数栈帧…

高德地图2.0 绘制、编辑多边形覆盖物(电子围栏)

1. 安装 npm i amap/amap-jsapi-loader --save移步&#xff1a;官方文档 2. map组件封装 <script lang"ts" setup> import AMapLoader from amap/amap-jsapi-loader import { onMounted, ref } from vue import { propTypes } from /utils/propTypesdefineO…

开发小程序

由于之前购入的阿里云ECS放着落灰&#xff0c;碰巧又看到个有趣的项目&#xff0c;于是就做了个生成头像的小程序…由于第一次完整发布小程序&#xff0c;记录一下遇到的问题 小程序名称&#xff1a;靓仔创意头像 &#x1f602; 关于小程序 接口请求&#xff0c;在开发过程中…

在 Mac 上安装双系统会影响性能吗,安装双系统会清除数据吗?

在 Mac 系统安装并使用双系统已经成为了许多用户办公的选择之一&#xff0c;双系统可以让用户在 Mac 上同时运行 Windows 或其他操作系统。然而&#xff0c;许多用户担心这样做会对 Mac 的性能产生影响。 接下来将给大家介绍 Mac 装双系统会影响性能吗&#xff0c;Mac装双系统…

C++速通LeetCode简单第20题-多数元素

方法一&#xff1a;暴力解法&#xff0c;放multiset中排序&#xff0c;然后依次count统计&#xff0c;不满足条件的值erase清除。 class Solution { public:int majorityElement(vector<int>& nums) {int ans 0;multiset<int> s;for(int i 0;i < nums.s…