C# :: Aufgabe #232 :: Lösung #5

6 Lösungen Lösungen öffentlich
#232

Teufelskreis einer selbstbezüglichen Aussage

Anfänger - C# von hollst - 17.12.2018 um 18:46 Uhr
Die folgende Aussage sei gegeben als String:

"Dieser Satz hat vierzig Buchstaben sowie einen Punkt."


Die Aussage ist natürlich falsch, denn der Satz hat tatsächlich fünfundvierzig Buchstaben.

Ersetzen wir nun in der Aussage das Wort "vierzig" durch "fünfundvierzig" bleibt die Aussage aber trotzdem falsch,

denn der neue Satz hat zweiundfünfzig Buchstaben. Schöner Teufelskreis, oder?


Schreibe ein Programm mit dem überprüft wird, ob es überhaupt eine (ausgeschriebene) Zahl gibt, die oben zu einer wahren Aussage führt.

Viel Spaß!

#5
vote_ok
von hollst (11760 Punkte) - 05.02.2019 um 09:42 Uhr
Quellcode ausblenden C#-Code
using System;
using static System.Console;

namespace int_to_word   //    18.12.2018    18.12.2018
{
    class Program
    {
        static void Main()
        {
            test_n_to_word();
        }

        static string n0_99_to_string(int n)
        {
            string[] temp = new string[] {
                "null",
                "eins", "zwei",  "drei",     "vier",     "fünf",     "sechs",    "sieben",   "acht",     "neun",
                "zehn",
                "elf" , "zwölf", "dreizehn", "vierzehn", "fünfzehn", "sechzehn", "siebzehn", "achtzehn", "neunzehn"
            };

            if (n < 20)
                return temp[n];

            temp[1] = "ein";

            string[] temp_zig = new string[] {
                "zwanzig", "dreizig", "vierzig", "fünfzig", "sechzig", "siebzig", "achtzig", "neunzig"
            };

            string result = string.Empty;
            int n_1 = n % 10, n_10 = n / 10;

            if (n_1 == 0)
                return temp_zig[n_10 - 2];

            return result += temp[n_1] + "und" + temp_zig[n_10 - 2];
        }

        static string n_to_word(int n)
        {
            if (n < 0 || n > 999)
                return $"n = {n} does not meet input range (0 ... 999)";

            int n_100 = n / 100;
            if (n_100 == 0)
                return n0_99_to_string(n);

            string[] temp = new string[] {
                "ein", "zwei",  "drei",     "vier",     "fünf",     "sechs",    "sieben",   "acht",     "neun"
            };

            int n_10 = n % 100;
            string result = temp[n_100 - 1] + "hundert";
            if (n_10 != 0)
                result += n0_99_to_string(n_10);
            return result;
        }

        static void test_n_to_word()
        {
            int temp = "diesersatzhatbuchstabensowieeinenpunkt".ToCharArray().Length;
            for (int i = -1; i < 1002; i++)
            {
                int temp2 = n_to_word(i).ToCharArray().Length;
                WriteLine($"{i,3}: {temp2}   {temp + temp2}");
                if (temp + temp2 == i)
                    WriteLine("LÖSUNG");
            }
            ReadKey(false);
        }
    }
}

Kommentare:

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

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