打印不同的排序排列,并在C ++中允许输入重复项
在此编程问题中,我们给了一个字符串,并且我们必须打印可以形成的字符串元素的不同排序排列。出现此问题的条件是该字符串可能包含一个字符,该字符将出现多次。同样,给定的字符串按排序顺序输入。
让我们举个例子来更好地理解这个概念,
Input : ABD Output : ABD , ADB , BAD , BDA , DAB , DBA INPUT : RSTU OUTPUT : RSTU , RSUT , RTSU , RTUS , RUST , RUTS , SRTU , SRUT , STRU , STUR , SURT , SUTR , TRSU , TRUS , TSRU , TSUR , TURS , TUSR , URST , URTS , USRT , USTR , UTRS , UTSR.
PERMUTATION正在根据特定序列或类型重新排列集合的所有元素。该套装可以订购,也可以不订购。
现在,我们已经了解了有关该问题的一切。让我们尝试创建解决问题的逻辑,
我们知道一些与置换有关的数学公式。由n个字符组成的包含n个字符的字符串生成的字符串总数由n!给出。如果字符串中有重复的字符,则字符串数由n给出!/一世!。
对于字符串STURS,可生成的字符串总数为5!/2!=60。由于s在字符串中出现2次。
使用这个我们知道创建的字符串数。现在,我们必须创建这些字符串。首先,我们将对字符串进行排序(如果没有)(输入的字符串将进行排序),以便最终的字符串将采用排序形式。现在,修复字符串的第一个字符并找到所有其余字符的排列,依此类推。这将以排序的方式给出所有需要的排列。
例如,
输入-RST
逻辑 -
从这个字符串中共有3个!=可以形成6个排列。
让我们修复R并找到s和t的置换。这将给出2个字符串RST,RTS。
类似地,固定S将得到SRT,STR。固定T将得到TRS,TSR。
因此,这将使输出为-RST,RTS,SRT,STR,TRS,TSR。这些是按顺序排列的。
现在,让我们创建一个程序来解决此问题,
示例
#include <bits/stdc++.h>
using namespace std;
bool swaper(char str[], int start, int curr){
for (int i = start; i < curr; i++)
if (str[i] == str[curr])
return 0;
return 1;
}
void printPermutations(char str[], int index, int n){
if (index >= n) {
cout<<str<<"\t";
return;
}
for (int i = index; i < n; i++) {
bool check = swaper(str, index, i);
if (check) {
swap(str[index], str[i]);
printPermutations(str, index + 1, n);
swap(str[index], str[i]);
}
}
}
int main(){
char str[] = "AABC";
int n = strlen(str);
cout<<"The string is : "<<str<<end;
cout<<"The distinct sorted permutations are : \t";
printPermutations(str, 0, n);
return 0;
}输出结果
The string is : AABC The distinct sorted permutations are : AABC AACB ABAC ABCA ACBA ACAB BAAC BACA BCAA CABA CAAB CBAA
热门推荐
10 香港老妈结婚祝福语简短
11 毕业立体贺卡祝福语简短
12 简短新年年会祝福语
13 评论小品祝福语大全简短
14 恭喜师兄结婚祝福语简短
15 员工集体辞职祝福语简短
16 高中新生祝福语 简短
17 装修祝福语男生搞笑简短
18 生日开业蛋糕祝福语简短