打印不同的排序排列,并在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 婆婆高寿祝福语大全简短