数学排列组合看看我哪里错了,总是差1,求有多少个8位二进制串包含3个连续的0或者4个连续的1?答案是147,我老算得148!
我的解:先看含有3个连续的0的,
000*****2∧5=32(含3个“4个连续1”)
1000****2∧4=16(含1个“4个连续1”)
*1000***2∧4=16
**1000**2∧4=16
***1000*(2∧3-1)2=14(含1个“4个连续1”)
****10002∧4-3=13(含2个“4个连续1”)。
下面是4个连续1的:
1111****2∧4=16
01111***2∧3=8
*01111**2∧3=8
**01111*2∧3=8
***011112∧3=8
根据容斥原理107+48-7=148,怎么算都不是147
数学排列组合二进制串看看哪里错了
答案:1 悬赏:50 手机版
解决时间 2021-02-19 11:52
- 提问者网友:半生酒醒
- 2021-02-18 11:13
最佳答案
- 五星知识达人网友:琴狂剑也妄
- 2021-02-18 11:21
问题出在你最后的那个式子中,减7是错误的,因为同时包含000和1111的组合应该是8个。
通过编程解决:
>> s=arrayfun(@(i)dec2bin(i,8),0:255,'UniformOutput',false);
>> sum(cellfun(@(str)~isempty(strfind(str,'000')),s))
ans =
107
>> sum(cellfun(@(str)~isempty(strfind(str,'1111')),s))
ans =
48
>> sum(cellfun(@(str)~isempty(strfind(str,'1111')),s)|cellfun(@(str)~isempty(strfind(str,'000')),s))
ans =
147
>> inx=cellfun(@(str)~isempty(strfind(str,'1111')),s)&cellfun(@(str)~isempty(strfind(str,'000')),s);
>> s(inx)'
ans =
'00001111'
'00011110'
'00011111'
'01111000'
'10001111'
'11110000'
'11110001'
'11111000'
通过编程解决:
>> s=arrayfun(@(i)dec2bin(i,8),0:255,'UniformOutput',false);
>> sum(cellfun(@(str)~isempty(strfind(str,'000')),s))
ans =
107
>> sum(cellfun(@(str)~isempty(strfind(str,'1111')),s))
ans =
48
>> sum(cellfun(@(str)~isempty(strfind(str,'1111')),s)|cellfun(@(str)~isempty(strfind(str,'000')),s))
ans =
147
>> inx=cellfun(@(str)~isempty(strfind(str,'1111')),s)&cellfun(@(str)~isempty(strfind(str,'000')),s);
>> s(inx)'
ans =
'00001111'
'00011110'
'00011111'
'01111000'
'10001111'
'11110000'
'11110001'
'11111000'
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯