C# :: Aufgabe #381
2 Lösungen

Binärzahlen ohne zwei aufeinanderfolgende Nullen
Anfänger - C#
von hollst
- 09.11.2020 um 15:10 Uhr
Erstelle eine Liste der ersten 1.000 Natürlichen Zahlen, die in ihrer binären Darstellung keine zwei aufeinanderfolgende Nullen haben.
Kleine Unterstützung zur Prüfung: Die ersten 10 Zahlen der Liste sind: 0, 1, 2, 3, 5, 6, 7, 10, 11 und 13. Das 1.000ste (letzte) Element der Liste ist 10.965.
Viel Spaß!
Kleine Unterstützung zur Prüfung: Die ersten 10 Zahlen der Liste sind: 0, 1, 2, 3, 5, 6, 7, 10, 11 und 13. Das 1.000ste (letzte) Element der Liste ist 10.965.
Viel Spaß!
Lösungen:
NET 5.x; C# 9.x; VS-2019
C#-Code

using System; using System.Linq; using System.Text.RegularExpressions; Enumerable.Range(1, 10_000).Where(x => !IsDoubleZero(I2B(x))).ToList().ForEach(x => Console.WriteLine($"{x} - {I2B(x)}")); string I2B(int n) => Convert.ToString(n, 2); bool IsDoubleZero(string s) => Regex.Matches(s, "(0)\\1*").Any(x => x.Length > 1);
NET 5.x; C# 9.x; VS-2019
C#-Code

using System; using System.Collections.Generic; using System.Text; Console.WriteLine(new BinaryWithoutDoubleZero(1, 10_000)); record BinaryWithoutDoubleZero(uint Start = 1, uint End = 100) { private readonly Dictionary<uint, string> _dic = new(); private static string ToBinary(uint n) => Convert.ToString(n, 2); private static bool IsDoubleZero(string s) { var z = 0; foreach (var i in s) { if (i == '0') z++; else z = 0; if (z == 2) return true; } return false; } private void SetNumbers() { for (uint i = Start; i < End; i++) { var b = ToBinary(i); if (!IsDoubleZero(b)) _dic.Add(i, b); } } public override string ToString() { StringBuilder sb = new(); SetNumbers(); foreach (var i in _dic) sb.Append($"{i.Key} : {i.Value}\n"); return sb.ToString(); } }