首页 > 其他 > 详细

手链样式

时间:2019-03-24 00:44:22      阅读:245      评论:0      收藏:0      [点我收藏+]

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


注意下面查找字串和全排列的操作,这里需要注意 string s, s.find(*iter) != s.end() 会报错
而且还不能用 auto 定义变量,emmm

所以要学会如何定义迭代器 , 对于 vector 可以这样定义:` vector::iterator iter = ans.begin() ·


next_permutation(s.begin(),s.end()) 的返回值为bool类型,直接改变了 s 的内容, reverse 也是直接改变 s 的内容,输入的参数都是首尾迭代器。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<vector>
#include<iterator>

using namespace std;


int main(){
    vector<string> ans;
    
    string s ="aaabbbbccccc";
    ans.push_back(s);
    int i = 0;
    while(next_permutation(s.begin(),s.end())){
//      cout << i++ <<endl;
        //检测是否含有,这个技巧可以有 
        string s2 = s+s;
        int flag = 0;
        for(vector<string>::iterator iter = ans.begin();iter!=ans.end();iter++){
            if(s2.find(*iter) != string::npos) {
                flag = 1;break;
            }
        }
        if(flag) continue;
        //检测是否可以反转
        reverse(s.begin(),s.end()) ;
        for(vector<string>::iterator iter = ans.begin();iter!=ans.end();iter++){
            if(s2.find(*iter)!= string::npos) {
                flag = 1;break;
            }
        }
        if(!flag) ans.push_back(s),cout << ans.size()<<endl;; 
    }
    
    cout << ans.size() <<endl;

    return 0;
}

手链样式

原文:https://www.cnblogs.com/wei-huan/p/10586155.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!