在c#中计算两个1之间的最大0的0

时间:2017-02-19 07:35:40

标签: c#

我需要一个程序的帮助,该程序将计算c#中给定二进制数中两个1之间的最大0。例如1100101(二进制为101),两个1之间的最大0为2.任何帮助?

这个代码用于计算字符串中的0,而不是1的

之间的0
string bin = "";
int max = 0;
for (int i = rem.Length - 1; i >= 0; i--)
{
     if (rem[i] == '0') 
     {
        bin = bin + rem[i];
        c++;
     }    
     else
     {
        bin = bin + rem[i];
     }
} 

3 个答案:

答案 0 :(得分:2)

试试这个(更新的代码):

system/database/DB.php

答案 1 :(得分:0)

这应该有效:

public static int CountZerosBetweenOnes(string binary)
{
    var indicesOfOnes = 
        binary.Select((c, i) => new {c, i})
        .Where(x => x.c == '1')
        .Select(x => x.i);

    return 
        indicesOfOnes
        .Zip(indicesOfOnes.Skip(1), (a, b) => b - a - 1)
        .DefaultIfEmpty(0)
        .Max();
}

它假设binary不包含10以外的任何字符。

如果您想要一个接受int的版本:

public static int CountZerosBetweenOnes(int binary)
{
    var indicesOfOnes = 
        Convert.ToString(binary, 2)
        .Select((c, i) => new {c, i})
        .Where(x => x.c == '1')
        .Select(x => x.i);

    return 
        indicesOfOnes
        .Zip(indicesOfOnes.Skip(1), (a, b) => b - a - 1)
        .DefaultIfEmpty(0)
        .Max();
}

我使用以下测试代码对其进行了测试,该代码输出了预期的结果:

public static void Main(string[] args)
{
    test("0000000000000"); // Outputs 0
    test("0000100010000"); // Outputs 3
    test("1111111111111"); // Outputs 0
    test("1000000000001"); // Outputs 11
    test("1000000000000"); // Outputs 0
    test("0000000000001"); // Outputs 0
    test("1010101010101"); // Outputs 1
    test("1001000100001"); // Outputs 4
}

static void test(string s)
{
    Console.WriteLine(CountZerosBetweenOnes(s));
}

或者在.Net小提琴上运行它:https://dotnetfiddle.net/H2Mt8w

答案 2 :(得分:0)

一个简单的版本:

        string num = "1011100";

        //trim the 0's at the start and the end, the result num =10111

        num=num.Trim(new Char[] { '0' });


        string[] intArr = num.Split('1');


        List<string> Result = new List<string>();

        foreach(string x in intArr)
        {
            if (x != "")
            {
                Result.Add(x);
            }
        }

        int Output = Result.Select(x => x).Max(x => x.Length);