#include <stdio.h>
#include <stdlib.h>
int jc(int x)
{
int tmp = 1;
for (int i = 1;i <= x;i++)
{
tmp *= i;
}
return tmp;
}
int MyC(int i, int j)//排列组合里面那个C,My(4,3)表示4个里面取3个
{
return jc(i) / (jc(i - j)*jc(j));
}
int IfFalse(int i)//返回不符合条件的组合数,
{
//7个里面选7个,或者7个里面选1个肯定是全连续的,
//7个里面选6个连续发光的,也就是7个里面找一个不发光的,就和7选1是一样的
//后面就是需要找出C27、C37、C47、C57中不连续的情况
if (i == 1||i==7)
{
return 0;
}
if (i == 2 )
{
//ac ad ae ag bd be bf ce cf df dg
return 11;
}
if (i == 3)
{
//abd abe acd ace acf acg ade adf adg aeg
//bce bcf bde bdf bdg bef
//cdf cef
//dfg
return 19;
}
if (i == 4)
{
return 15;
}
if (i == 5)
{
return 2;
}
return 0;
}
int main(int argc, char *argv[])
{
// 请在此输入您的代码
int sum = 0;//组合数
int i, j;
int fsum = 0;//不符合条件的组合数
for (i = 1;i <= 7;i++)
{
//不能直接用组合数累计,他题目要求管子必须连在一起才算一个
//比如你7个选2个,选到了ad,这a和d是不连在一起的,所以不能算
//我们假设图中abcdefg分别对应1234567,数字两个相邻的是可以算的,
//特例是fa,gb,gc,ge(组合前后顺序可变,fa==af)
sum += MyC(7, i);
fsum += IfFalse(i);
}
sum -= fsum;
printf("%d", sum);
return 0;
}
04-04
4114
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
02-05
04-09
377
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-20
578
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-20
1万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交