C# :: Aufgabe #231 :: Lösung #2

5 Lösungen Lösungen öffentlich
#231

Binärzahlen ohne Doppelnull

Anfänger - C# von hollst - 20.11.2018 um 09:55 Uhr
Es sein z. B. N = 10.000.

Man schreibe ein Programm, das alle natürlichen Zahlen kleiner N auflistet,
die in ihrer binären Repräsentation keine zwei aufeinander folgende Nullen besitzen.

Anmerkung: Führende Nullen werden nicht berücksichtigt, die erste natürliche Zahl, die nicht in der Liste wäre,
ist somit die 4 (4-dezimal = 100-binär).

Viel Spaß!
#2
vote_ok
von Exception (7090 Punkte) - 26.11.2018 um 20:19 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BinaerDoppelteNull_231
{
    class Program
    {
        
        private static int n;

        static void Main(string[] args)
        {
            Dictionary<int, string> mapping = new Dictionary<int, string>();

            try
            {
                if(args.Length != 1)
                {
                    throw new ArgumentException("Es muss ein Ganzzahl Parameter übergeben werden.");
                }
                if (!int.TryParse(args[0], out n))
                {
                    throw new Exception("Fehlerhafte Eingabe \"" + args[0] + "\"");
                }
                if(n < 1)
                {
                    throw new ArgumentException("N muss größer oder gleich 1 sein.");
                }

                Console.WriteLine("n = {0}", n);
                Console.WriteLine("-------------------------");
                Console.WriteLine("Liste alle Zahlen auf, die keine zwei Nullen (Binärdarstellung) hintereinander enthalten...");
                Console.WriteLine();

                mapping = getDecBinMapping();

                printValues(mapping);
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex.Message);
                Console.ResetColor();
            }

            Console.ReadLine();
        }

        private static Dictionary<int, string> getDecBinMapping()
        {
            Dictionary<int, string> mapping = new Dictionary<int, string>();

            for (int currentDecimal = 0; currentDecimal < n; currentDecimal++)
            {
                string binaryValue = Convert.ToString(currentDecimal, 2);

                if(!binaryValue.Contains("00"))
                {
                    mapping.Add(currentDecimal, binaryValue);
                }
            }

            return mapping;
        }

        private static void printValues(Dictionary<int, string> mapping)
        {
            Console.WriteLine("Dezimal\t\tBinär");
            Console.WriteLine("-------------------------");

            foreach (KeyValuePair<int, string> pair in mapping)
            {
                Console.WriteLine("{0}\t\t{1}", pair.Key, pair.Value);
            }

            Console.WriteLine("-------------------------");
            Console.WriteLine("Es wurden von {0} Binärzahlen {1} ohne Doppelnull gefunden.", n, mapping.Count);
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1810989

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.