手链样式

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

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

圆(环)排列:围成一个圆,圆旋转一下就是同一个排列。因此从n个中取r个的圆排列数为

项链排列:项链是立体的,存在翻转的情况,项链排列数为

但是翻转对于左右对称的情况是没有影响的,不需要除以2。

所以项链排列的公式为:

(引用自:https://www.cnblogs.com/lemonbiscuit/p/7776008.html)

方法二:全排列,去掉相同的

在v中存翻转前后的两种结果,对任意新的一种组合方式,在v中进行匹配查找。

do...while结构

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */vector<string> v;//存储已出现的情况 int main(int argc, char** argv)
{string str = "aaabbbbccccc";int count = 0;v.clear();do{vector<string>::iterator it;for(it = v.begin(); it != v.end(); it++){//从*it的0位置开始找,返回第一次成功匹配str的首字符在*it中的位置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());     //需要algorithm头文件 可以翻转 v.push_back(str2);  count++;}while(next_permutation(str.begin(),str.end())) ;cout<<count<<endl;return 0;
}
//  1170 

while...结构

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */vector<string> v;//存储已出现的情况 int main(int argc, char** argv)
{string str = "aaabbbbccccc";int count = 1;v.clear();string str2 = str+str;v.push_back(str2);reverse(str2.begin(),str2.end());v.push_back(str2); while(next_permutation(str.begin(),str.end())) {vector<string>::iterator it;for(it = v.begin(); it != v.end(); it++){//从*it的0位置开始找,返回第一次成功匹配str的首字符在*it中的位置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());     //需要algorithm头文件 可以翻转 v.push_back(str2);  count++;};cout<<count<<endl;return 0;
}
//  1170 

方法三:

在v外的字符串str2中存储旋转和翻转的结果,在str2中匹配查找v中组合

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */vector<string> v;//存储已出现的情况 int main(int argc, char** argv)
{string str = "aaabbbbccccc";int count = 1;int flag = 0;v.push_back(str);while(next_permutation(str.begin(),str.end())){flag = 0;//转动string str2 = str + str;vector<string>::iterator it;for(it = v.begin(); it != v.end(); it++){if(str2.find(*it) != string::npos){flag = 1;//找到了该种组合方式,不再查找 break;}}//翻转if(flag == 0){//转动后,在v中仍没有找到相同组合 reverse(str2.begin(),str2.end());for(it = v.begin(); it != v.end(); it++){if(str2.find(*it) != string::npos){flag = 1;break;}}}//继转动后,翻转后,在v中仍没有找到相同组合,确定为一种新组合,添加进v if(flag == 0){v.push_back(str);count++;} }cout<<count<<endl;return 0;
}
//  1170 

方法四、map<string,bool> mp 代替 vector 和 flag

#include <iostream>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */map<string,bool> mp;//存储已出现的情况
int colorNum[3] = {2,4,5};//假定从红色开始放置,所以红色已经少了一个
char color[4] = "rwy";//红色,白色,黄色bool pd(string str)
{int len = str.size();str += str;//旋转 for(int i = 0; i < len; i++){//取str中的第i个(包括第i个)开始的len个字符 string temp = str.substr(i,len);if(mp[temp] == 1)return 0;//如果在mp中存在,则不增加计数,返回0 }return 1;
}int dfs(string str)
{if(!colorNum[0] && !colorNum[1] && !colorNum[2]){//所有颜色的数量都为0了,得出了一个新的排列 if(pd(str) == 0) return 0;//该排列所属组合已经计数了,返回0,跳出本层dfs reverse(str.begin(),str.end());//翻转 if(pd(str) == 0)return 0;//该排列的翻转排列所属组合已经计数了,返回0,跳出本层dfs //该排列的旋转和翻转所属组合均未计数,添加进mp,计数加一,返回1 ,跳出本层dfsmp[str] = true; return 1;}int count = 0;for(int i = 0; i < 3; i++){if(!colorNum[i]) continue;//该颜色数量为0,结束本层循环,直接进行i+1层循环 string temp = str;colorNum[i]--; temp += color[i];count += dfs(temp);colorNum[i]++;}return count;
}
int main(int argc, char** argv)
{mp.clear();cout<<dfs("r")<<endl;return 0;
}
//  1170 

(六省)蓝桥真题 手链样式相关推荐

  1. 【蓝桥真题3】蓝桥改革变难,想进国赛这些能力你可缺一不可

    ⭐️引言⭐️ 大家好,我是执梗.蓝桥杯省赛的倒计时也就剩下一个月的时间了,如果练过近七八年的真题的小伙伴,很明显地能感觉到蓝桥杯的难度越来越大,虽然遥遥还比不上ACM,但它的平均难度正以明显地速度增加 ...

  2. 【蓝桥真题7】贴吧车队作弊?应对线上考和双填趋势,我们该如何备考?

    ⭐️引言⭐️ 大家好,我是执梗.还有一个星期蓝桥杯就要开赛了,但是现在却风起云涌,由于疫情的原因,绝大多数地区已经改为线上考试.理所当然,在这种趋势下,出现作弊行为肯定是无法避免的.甚至在贴吧都沦陷成 ...

  3. 【蓝桥真题1】这道用了7个for循环的蓝桥真题,让舍友哭着跑出考场【内附原题资源】

    ⭐️引言⭐️                 大家好,我是执梗,蓝桥杯的报名快接近尾声,如果有兄弟还没报名不了解比赛,缺少视频讲解和真题资源的一定要阅读一下我的这篇蓝桥全解析--蓝桥全解析.为了帮助兄 ...

  4. 【蓝桥真题4】练练填空就想进国赛?拿下大题才能让你真正有底气(蓝桥31日冲刺打卡)

    ⭐️引言⭐️ 大家好啊,我是执梗.上次出的蓝桥真题三系列受到了很多同学的喜爱,大家问了我许多关于蓝桥杯的问题,我也一一解答了.但我发现起码一半以上的同学存在一个误区--我光靠选择题能拿个省一进国赛吗? ...

  5. 蓝桥杯第六届决赛真题大全解(java版本)

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 >蓝桥杯第六届决赛第一题[(详情(分机号))](http://blog.csdn.net ...

  6. 【23不怎么懂】蓝桥杯之手链样式(填空题)

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

  7. 2015蓝桥真题(A组省赛)

    方程整数解 方程: a^2 + b^2 + c^2 = 1000 这个方程有正整数解吗?有:a,b,c=6,8,30 就是一组解. 你能算出另一组合适的解吗? 请填写该解中最小的数字. 参考答案: 1 ...

  8. 【蓝桥真题5】带三百人训练了十天精选蓝桥真题,看看他们都练些什么(三门语言题解)

    ⭐️引言⭐️ 大家好啊,我是执梗.最近一周多都没有更新文章了,因为确实是非常忙,在上篇文章了一下开启了蓝桥打卡31日的活动.每天忙着群里管理解答,统计打卡,寻找真题,根本没有时间更新文章.每天也过的非 ...

  9. 【蓝桥真题6】三十块的蓝桥省赛模拟真题,做的大一都直呼上当(文末PDF原题)

    ⭐️引言⭐️ 大家好,我是执梗.这几天蓝桥杯的省赛模拟赛正在开展,报名费一人三十元(没错又是丰收的结节,开始割韭菜了).昨天抽空做了一下,虽然没有出成绩,但是难度确实不高,和这两届的真题难度比起来有点 ...

最新文章

  1. This Gradle plugin requires a newer IDE able to request IDE model level 3.For Android Studio this
  2. python 3元运算符
  3. (总结)RHEL/CentOS 7.x的几点新改变
  4. mongodb全套配置
  5. IDEA添加模块时,插件报错:java.util.NoSuchElementException Collection is empty
  6. P2184 贪婪大陆
  7. P3807-[模板]卢卡斯定理
  8. java tongpaiyu danliantiao_java版的汉字转拼音程序
  9. 想创业怕失败就不要轻易选择去创业
  10. homestead安装swoole扩展
  11. Web Fonts (二) OTF/TTF 转 WOFF
  12. Win10开启高性能、卓越性能模式的方法
  13. eplan p8详细安装步骤文库_EPLAN_P8_2.1.6 安装步骤
  14. STM32 Systick定时器在实现1us延时时的问题与解决
  15. boost入门(四):Asio实现网络通信
  16. Pixracer V1.0编译固件
  17. 山海演武传·黄道·第一卷 雏龙惊蛰 第二章 修闵本饰邪
  18. Android应用中打开微信扫一扫
  19. 基于6种监督学习(逻辑回归+决策树+随机森林+SVM+朴素贝叶斯+神经网络)的毒蘑菇分类
  20. SpringBoot整合Thymeleaf+EasyExcel实现excel文件的读取并展示,附加swagger2配置(超详细示范!)

热门文章

  1. 校园招聘-找工作的经验
  2. 白话 TCP 三次握手与四次分手的过程
  3. 开心online破10万,欧耶
  4. 数据挖掘 贝叶斯网络
  5. 【渝粤题库】国家开放大学2021春2218房地产营销管理题目
  6. pl/sql developer oracle生僻字显示问题
  7. CyberVein恭祝大家新年快乐,牛年大吉!
  8. ueditor 进行html预览,使用ueditor进行页面预览和打印
  9. 满意度和忠诚度计算_终生忠诚度:有吗?
  10. 15行CSS代码 就可以让你的手机软重启