有一道c语言题目,想请教一下如何做

a1411473204 2018-11-01 09:24:32
程序输入一个整数n(1<=n<=20),在由0和1组成的长度为n的字符串中,输出不包含“101”子串的字符串的个数。
例如n=4时,不包含101子串的字符串有12个:
0000,0001,0010,0011,0100,0110,0111,1000,1001,1100,1110,1111
...全文
106 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
英雄@末路 2018-11-02
  • 打赏
  • 举报
回复
B101 = 5
n 从3 到20(小于3不用考虑), 系数就是(5<<0), (5<<1),,, (5 <<(n-3))
然后逐个去位与,结果不为0就+1,看最后个数呗
老马何以识途 2018-11-02
  • 打赏
  • 举报
回复
仔細思考其實這些字符串是什麽?就是位數為n的所有二進制數的集合! 所以答案就出來了:循環計算2的0次方到n次方,然後轉換成二進制數,再轉換成字符串。 生成每一個字符串時,去判斷其中有沒有101子串,有則剔除,這個思路最直接了。
636f6c696e 2018-11-02
  • 打赏
  • 举报
回复
递归来做比较方便,分为末两位是00/01/11/10四种来计算
老马何以识途 2018-11-02
  • 打赏
  • 举报
回复
確實如此,多謝指正!
引用 4 楼 yz_555 的回复:
[quote=引用 2 楼 hzy_76 的回复:] 仔細思考其實這些字符串是什麽?就是位數為n的所有二進制數的集合! 所以答案就出來了:循環計算2的0次方到n次方,然後轉換成二進制數,再轉換成字符串。 生成每一個字符串時,去判斷其中有沒有101子串,有則剔除,這個思路最直接了。
循环计算的应该是0到[(2^n)-1]吧,需要考虑全0或全1。[/quote]
yz_555 2018-11-02
  • 打赏
  • 举报
回复
引用 2 楼 hzy_76 的回复:
仔細思考其實這些字符串是什麽?就是位數為n的所有二進制數的集合!
所以答案就出來了:循環計算2的0次方到n次方,然後轉換成二進制數,再轉換成字符串。
生成每一個字符串時,去判斷其中有沒有101子串,有則剔除,這個思路最直接了。

循环计算的应该是0到[(2^n)-1]吧,需要考虑全0或全1。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧