【问题标题】:Find all N-digit binary numbers with a limit of reps of 1 and 0查找所有代表限制为 1 和 0 的 N 位二进制数
【发布时间】:2020-12-08 00:55:53
【问题描述】:

需要一些关于 R 任务第二部分算法的建议。

输入两个给定的正整数 N 和 R 找到所有 N 位二进制数 R 每个数字的最大游程长度,同一数字在一个连续的数字中连续出现的次数。

对于等于 2 的 R,2 是数字表示法中最多可以出现在一行中的数字 0(下一个应该是数字 1)。数字 1 序列也是如此。

N 不能大于 64。 输出可以不排序

输入

N = 5 R = 1
output:
1
10
101
1010
10101
Total: 5

input:
N = 4, R = 2
output:
1
11
110
1100
1101
10
100
1001
101
1011
1010
Total: 11

input:
N = 12, R = 6
output:
1
11
111
1111
11111
111111
1111110
11111100
111111000
1111110000
11111100000
111111000000
111111000001
11111100001
...
101010101011
101010101010
Total: 3903

【问题讨论】:

  • 您的示例答案似乎与您的问题陈述不匹配——它们包含少于 N 位的数字,并且不包含任何前导 0 数字的序列。对于您的 N=5/R=1 示例,应该只有 2 个答案:1010101010
  • (如果您认为较短的序列具有前导 0,则它们通常有太多连续的 0)

标签: algorithm


【解决方案1】:

根据您的示例,您似乎不算领先0。 以下动态算法将为您工作:

假设f(N,R) 是给定NR 的期望结果。 第一个数字必须以1 开头,并且可以连续排列到R。 所以你可以在字符串的开头连续有 1,..,R 1。 所以你有f(N,R)=f(N-1,R)+f(N-2,R)+...+f(N-R,R) 这是一个递归关系。 所以如果你能找到f(1,R) ... f(R,R) 的值,你可以继续找到任何f(N,R)。 通过以下方法,您可以找到值f(i,R) i<=R 这里的区别就像你没有限制 例如,如果 i=10 你只想设置整数 A1..Ak 其中A1+..+Ak=i 和因为i<=R R 不会在这里受到限制。 在这种情况下f(i,R)=2^(i-1) 这样您就可以轻松填写​​f(1,R) , .. , f(R,R),然后继续填写更大的Nf(N,R)= f(N-1,R)+f(N-2,R)+...+f(N-R,R)

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2014-10-24
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多