首页 > 试题广场 >

从数字集合{1,2,3,4,… ,20}中选出3个数字的子集

[单选题]
从数字集合{1,2,3,4,… ,20}中选出3个数字的子集,如果不允许两个相连的数字出现在同一集合中,那么能够形成多少个这种子集?
  • 816
  • 220
  • 340
  • 620
推荐
不做任何限制,一共有 C(20,3) = 20*19*18 = 1140种
有且只有两个数字相连的情形:
有“1、2”的情形有17种
有“2、3”的情形有16种
有“3、4”的情形有16种
。。。
有“17、18”的有16种
有“18、19”的有16种
有“19、20”的有17种

有三个相连的有18种
故一共1140-17-16*17-17-18=816种

选 A
编辑于 2015-01-26 17:26:20 回复(2)
从20个数中取3个不相邻的数,有点像插隔板的模型,但仔细一想,插隔板是在空里插,而这道题是取,动作不同,逆向思维告诉我们,插的方法和取得方法是一样的,所以是模型转换为17个数插入3个数,那么就是C(18,3)=816
发表于 2016-03-02 09:49:04 回复(0)
我是这样算的,容斥原理吧
不加限制的取3个是C(20,3)
减去  有2个是在一起的(第三个没要求),是C(19,1)*C(18,1)
加上  3个都在一起,是C(18,1)
发表于 2015-09-04 23:15:30 回复(0)
o2n头像 o2n
def nn(n) 
  if n<=1    
    return 1 
  else 
    return n*nn(n-1) 
  end 
end
 
def c(n,m)
  return nn(n)/(nn(m)*nn(n-m)) 
end 

puts c(18, 3)
816

so 答案是A 这个问题 可以想成 3个数字向剩下17个数字分成的18个区间内插值

编辑于 2015-01-28 00:07:46 回复(1)
因为一共20本书,且不相邻,可以理解为把3本书插到17本书的间隔处,即加头尾的18个空格里,有多少种组合。如下:
_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_
(间隔数为 n + 1 = 17 + 1 = 18)
所以从上述18个位置中选择3个位置放书,即有 C(18, 3)=816 种。
发表于 2016-09-17 13:55:22 回复(0)
用总的子集数减去不符合要求的情况:
       总的子集数:c(20,3)=1140;
       三个数都相连,用捆绑法将三个数捆绑为一个数所以是C(18,1);
       两个相连,一样用捆绑法,先选出相连的两个数C(19,1),第二个数除去相连两个数两边的数共有16种选择,考虑相邻的两个数为头和尾的情况是17种选择,故两个数相连的情况数为:C(19,1)*16+2;
       所以符合条件的子集数:C(20,3)-C(18,1)-(C(19,1)*16+2)=816;
发表于 2015-09-08 10:38:13 回复(0)
int main()
{
    int count = 0;   
   for(int a = 1; a <= 16; a++)
   {
         for(int b = a + 2; b <= 18; b++)
        {
            for(int c = b + 2; c <= 20; c++)
           {
                count++;
            }
        }
   }
    printf("能够形成%d个这种子集",count);
}

发表于 2015-01-25 17:41:17 回复(1)
这道题可以理解为把3本书插到17本书的中间,即加头尾的18个空格里,有多少种组合。因为不能相邻,所以是有C   18   3=816   种方法。
发表于 2015-08-11 14:51:14 回复(8)
其实就类似于“书架上有编号为1-19的19本书,从中拿5本,问5本编号都不相邻的拿法有多少种?”这道题,把3个数查到17个形成的18个间隔,最后排序1-20,。    c(3,18)=816;
发表于 2015-09-04 10:58:54 回复(0)
"不邻问题"插空法,即在解决对于某几个元素要求不相邻的问题时,先将其它元素排好,再将指定的不相邻的元素插入已排好元素的间隙或两端位置,从而将问题解决的策略。
发表于 2016-11-25 15:07:16 回复(0)
相当于3个数插入到18个空中
发表于 2015-09-05 00:00:15 回复(0)
这类不相邻问题等价于:找空格插空,算头又算尾。。这类问题先这么记忆吧。。。
发表于 2015-08-19 15:23:35 回复(0)
将1...20化成圆,然后逆向求,三个数字连着的,两个数字连着的,然后C(20,3)减去不符合要求的,
发表于 2015-08-15 15:08:52 回复(0)