第六届蓝桥杯A组C/C++ 第七题 手链样式

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

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

简单的排列组合,我在前两场的比赛中都出了排列组合的题(数三角形),有心的童鞋应该好好看看组合数学。这道题的思路是如果把所有的玛瑙看做不同的话应该用(3+4+5)!种,再除掉重复的需要除以3!4!5!(想想为啥)。在考虑到环形,可以先固定第一颗,答案是(3+4+5-1)!/(2!+4!+5!)+(3+4+5-1)!/(3!+3!+5!)+(3+4+5-1)!/(3!+4!+4!)

#include <cstdio>

int juchen(int a) {
    int b = 1;
    for(int i = 1; i<=a; i++) {
        b *= i;
    }
    return b;
}
int main () {
    int zi = juchen(3+4+5-1);
    int a = juchen(2)*juchen(4)*juchen(5);
    int b = juchen(3)*juchen(3)*juchen(5);
    int c = juchen(3)*juchen(4)*juchen(3);
    printf("%d\n",zi/a+zi/b+zi/c);
    return 0;
}

答案是62370

猜你喜欢

转载自blog.csdn.net/wugufeng0220/article/details/45029415