2015第6届蓝桥杯A组第7题 手链样式 题解

题目:
手链样式
小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
他想用它们串成一圈作为手链,送给女朋友。
现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢? 请你提交该整数。不要填写任何多余的内容或说明性的文字。

思路1:
DFS;递归深度为12(一共的位置),每个位置能选到的种类数为3:红珊瑚、白珊瑚、黄玛瑙;递归出口为要选择的位置到头了,全都选满;
因为是手串,是圆形的排列,得出的结果最后除以12

思路2:高中的排列组合,用数学公式算即可,得出的结果除以12

思路3:用递归,f(a,b,c,sum) = f(a - 1,b,c,sum -1) + f(a,b - 1,c,sum - 1) + f(a, b, c - 1,sum -1);得出的结果除以12
a,b,c分别是红珊瑚,白珊瑚,黄玛瑙的个数(还剩下的可选择的个数)
sum是已经选择的总的个数
(解法跟2017年蓝桥杯真题 字母组串 代码填空给的解法一致)

答案:2310

Code:


#include<bits/stdc++.h>
using namespace std;
int cnt = 0;

int  getnum(int a, int b, int c,int sum){
    if(a < 0 || b < 0 || c < 0) return 0;
    if(sum <= 0) return 1;

    return getnum(a - 1, b, c,sum - 1) + getnum(a, b - 1, c,sum - 1) + getnum(a, b, c - 1, sum - 1);

}

int main(){

    cnt = getnum(3, 4, 5, 3 + 4 + 5);
    cnt /= 12;
    cout<<cnt<<endl;
    return 0;
} 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值