有重复元素的排列问题
来源:互联网 发布:sql unique 约束 编辑:程序博客网 时间:2024/06/07 08:04
有重复元素的排列问题
【问题描述】
设R={ r1, r2 , …, rn}是要进行排列的n个元素。其中元素r1, r2 , …, rn可能相同。试设计一个算法,列出R的所有不同排列。
【编程任务】
给定n 以及待排列的n 个元素。计算出这n 个元素的所有不同排列。
【输入格式】
文件的第1 行是元素个数n,1≤n≤500。接下来的1 行是待排列的n个元素。
【输出格式】
计算出的n个元素的所有不同排列输出。文件最后1行中的数是排列总数。
【输入样例】
4
aacc
【输出样例】多解
aacc
acac
acca
caac
caca
ccaa
6
【解题思路】
如果是不重复的序列,直接按照最简单的排列方式,采用递归的方式将第一个元素与最后一个元素交换,但题中会有重复的排列,所以可以增加一个判断的条件,判断是否有重复的,就是这么简单。。
【代码】
#include<bits/stdc++.h> //万能头文件using namespace std;long long ans;int n;char str [1001];/*检查是否重复,重复返回false,不重复返回true*/bool ok (char str[],int a,int b) { for(int i=a;i<b;i++) { if(str[i] == str[b]) return false; else return true; }}/*传说中的核心代码*/void perm (char str[],int k,int m) {//函数的出口 if(k == m) { ans++; for(int i=0;i<=m;i++) { cout << str[i]; } cout <<endl; return; } else { for(int i=k;i<=m;i++) { if(ok(str,k,i)) { swap(str[k],str[i]);//交换 perm(str,k+1,m);//递归 swap(str[k],str[i]);//要归位 } } }}/*主函数 没毛病*/int main() { cin>>n; for(int i=0;i<n;i++) { cin>>str[i]; } getchar(); perm(str,0,n-1); cout<<ans<<endl; return 0;}
阅读全文
0 0
- 8594 有重复元素的排列问题
- 8594 有重复元素的排列问题
- 有重复元素的排列问题
- 有重复元素的排列问题
- 有重复元素的排列问题
- 有重复元素的全排列问题
- 8594 有重复元素的排列问题
- 有重复元素的全排列问题
- 有重复元素的排列问题
- 有重复元素的排列问题
- 有重复元素的排列问题
- 【9501】有重复元素的排列问题
- 有重复元素的排列问题
- 有重复元素的排列问题
- 有重复元素的全排列问题
- 有重复元素的排列问题
- 有重复元素的排列问题
- 有重复元素的全排列问题
- MySQL 2表及3表查询
- cpp notes1
- java开发C编译器:把函数调用编译成字节码
- AJAX防重复提交-多种方式
- angualr4 环境搭建
- 有重复元素的排列问题
- 蓝牙业务全解 001(软件上层至底层)(android平台)
- 使用Fiddler进行iOS APP的HTTP/HTTPS抓包
- STL中bitset类用法
- CentOS下面安装ftp服务器
- OpenGL ES 2.0
- Android中TextView滚动显示信息的效果
- PHP Spl 研究笔记——栈
- Spatial pyramid pooling (SPP)-net (空间金字塔池化)笔记