微商城网站建设好么,东莞大公司排名,住房和城乡建设部网站注册进度,医院行业的网站是很难做吗题目描述 小明有3颗红珊瑚#xff0c;4颗白珊瑚#xff0c;5颗黄玛瑙。 他想用它们串成一圈作为手链#xff0c;送给女朋友。 现在小明想知道#xff1a;如果考虑手链可以随意转动或翻转#xff0c;一共有多少不同的组合样式#xff1f; 输出 请你输出该整数。不要输出任…题目描述 小明有3颗红珊瑚4颗白珊瑚5颗黄玛瑙。 他想用它们串成一圈作为手链送给女朋友。 现在小明想知道如果考虑手链可以随意转动或翻转一共有多少不同的组合样式 输出 请你输出该整数。不要输出任何多余的内容或说明性的文字。
解题思路 因为这题的手链可以随意转动或翻转假如我们的手链是1234则转动的意思是2341,3412也属于一种情况我们可以利用复制解决转动的问题比如我们将手链变成12341234这样我们2341,3412都属于12341234的子串所以只要找得到它的子串则说明是一种情况,旋转则属于下面这种情况
这属于一种情况那么旋转要怎么解决呢我们利用reverse函数就可以解决旋转的问题比如12341234旋转以后为43214321我们把旋转后的情况也存进vector数组里面就行了枚举情况可以用next_permutation函数。
知识点 do—while语句中有continue关键字时程序会跳到do—while语句的 }while() 处 然后判断while 是否满足条件,然后程序进行下一布的运行。
代码如下
#include iostream
#include cstring
#include vector
#include algorithm
using namespace std;
vectorstringv;
int ans;
vectorstring::iterator it;int main() {string str aaabbbbccccc;do {for (it v.begin(); it ! v.end(); it) {if ((*it).find(str) ! -1)//找不到会返回-1break;}if (it ! v.end())continue;string str2 str str;v.push_back(str2);reverse(str2.begin(), str2.end());v.push_back(str2);ans;} while (next_permutation(str.begin(), str.end()));cout ans endl;return 0;
}