藍橋杯試題集
阿新 • • 發佈:2018-11-29
aaa 組合 fin std ext 如果 != ever 女朋友
藍橋杯搜索模擬暴力題:
題目:
手鏈樣式
小明有3顆紅珊瑚,4顆白珊瑚,5顆黃瑪瑙。
他想用它們串成一圈作為手鏈,送給女朋友。
現在小明想知道:如果考慮手鏈可以隨意轉動或翻轉,一共可以有多少不同的組合樣式呢?
思路:
這道題自己還沒做出來,其實自己分析到了轉動翻轉是怎麽樣的,但是沒有想到可以+本身就可以來控制轉動和翻轉,然後在推是不是可以求出所有情況除以多少多少得出答案,但是也沒有推出來,最後看了題解才知道的,感覺自己還是很菜很菜的
全排列,對每種情況轉動,翻轉檢測;
具體看代碼:
#include<iostream> #include<vector> #include<algorithm> using namespace std; #include <iostream> #include <string> #include <algorithm> using namespace std; vector<string> v;//vector動態存儲符合要求的串 int main() { string s="aaabbbbccccc";//abc分別代表三種顏色的珠子 int ans=1,flag=0; v.push_back(s);//最初一種情況肯定是符合條件的 //cout<<*v.begin()<<endl;while(next_permutation(s.begin(),s.end()))//全排列函數 { flag=0; //轉動 string s1=s+s; vector<string>::iterator it=v.begin(); for(;it!=v.end();it++) { if(s1.find(*it)!=s1.npos) { flag=1; break; } } // if(!flag) { reverse(s1.begin(),s1.end()); for(it=v.begin();it!=v.end();it++) { if(s1.find(*it)!=s1.npos) { flag=1; break; } } } if(!flag) { ans++; v.push_back(s); } } cout<<ans<<endl; return 0; }
藍橋杯試題集