用 C/C++ 计算不含连续 1 的二进制字符串数量的程序?
这里我们将看到一个有趣的问题。假设给定一个 n 的值。我们必须找到所有长度为 n 的字符串,这些字符串中没有连续的 1。如果 n = 2,则数字为 {00, 01, 10},所以输出为 3。
我们可以使用动态规划来解决它。假设我们有表“a”和“b”。其中 arr[i] 存储长度为 i 的二进制字符串的数量,其中没有连续的 1 且以 0 结尾。类似地,b 持有相同的内容,但数字以 1 结尾。当最后一个为 0 时,我们可以在它后面附加 0 或 1,但如果最后一个为 1,则只能附加 0。
让我们了解一下获取此想法的算法。
算法
noConsecutiveOnes(n) −
Begin define array a and b of size n a[0] := 1 b[0] := 1 for i in range 1 to n, do a[i] := a[i-1] + b[i - 1] b[i] := a[i - 1] done return a[n-1] + b[n-1] End
示例
#include <iostream> using namespace std; int noConsecutiveOnes(int n) { int a[n], b[n]; a[0] = 1; b[0] = 1; for (int i = 1; i < n; i++) { a[i] = a[i-1] + b[i-1]; b[i] = a[i-1]; } return a[n-1] + b[n-1]; } int main() { cout << noConsecutiveOnes(4) << endl; }
输出
8
广告