题目描述:
小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
他想用它们串成一圈作为手链,送给女朋友。
现在小明想知道:如果考虑手链可以随意转动或翻转,一共有多少不同的组合样式?
输出
请你输出该整数。不要输出任何多余的内容或说明性的文字
思路:1.将珠子抽象成字符,然后使用C++中的下一个排列函数来求排列
2.由于手链可以任意转动和翻转,故可以对每一字符串*2,然后比较是否可以匹配当前字串
3.为了方便存储已排列字串,故可使用vector容器
#include<bits/stdc++.h>
using namespace std;
vector<string> vec;
int main()
{
string str="aaabbbbccccc";
string temp=str+str;
int num=0;
num++;
vec.push_back(temp);
reverse(temp.begin(),temp.end());
vec.push_back(temp);
while(next_permutation(str.begin(),str.end()))
{
temp=str+str;
int flag=0;
for(int i=0;i<vec.size();i++)
{
if(vec[i].find(str)!=string::npos)
{
flag=1;
break;
}
}
if(!flag)
{
num++;
temp=str+str;
vec.push_back(temp);
reverse(temp.begin(),temp.end());
vec.push_back(temp);
}
}
cout<<num;
}