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