第六届 蓝桥杯 第七题 手链样式 枚举 暴力 解题报告

来源:互联网 发布:网络十大禁书合集下载 编辑:程序博客网 时间:2024/06/02 12:35
手链样式


小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
他想用它们串成一圈作为手链,送给女朋友。
现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?


请你提交该整数。不要填写任何多余的内容或说明性的文字。


思路:由于可以翻转,那么将其扩大两倍,例如abcd,bcdabcda(中找abcd) 能找到就是一种情况

vector的用法: http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html

vector<int>::iterator it;//vector遍历元素的方法for(it=vec.begin();it!=vec.end();it++)    cout<<*it<<endl;

代码:

#include <iostream>#include <algorithm>#include <string>#include <vector>using namespace std;int main(){    vector<string> v;//存已经找到的    int sum = 0;    string str = "aaabbbbccccc";    do    {        vector<string>::iterator it;        for(it=v.begin(); it != v.end(); it++)        {            //当寻找失败返回string::npos 值为4294967295            if((*it).find(str, 0) != string::npos)            {                break;            }        }        if( it != v.end() ) continue;        string str2 = str + str;  //可以任意转动的缘故        v.push_back(str2);        reverse(str2.begin(), str2.end());  //可以任意翻转的缘故        v.push_back(str2);        sum ++;    }    while(next_permutation(str.begin(), str.end()));    cout << sum ;}

答案:1170

2 0
原创粉丝点击