我需要一个程序的帮助,该程序将计算c#中给定二进制数中两个1之间的最大0。例如1100101(二进制为101),两个1之间的最大0为2.任何帮助?
这个代码用于计算字符串中的0,而不是1的
之间的0string 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];
}
}
答案 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
不包含1
和0
以外的任何字符。
如果您想要一个接受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);