C# :: Aufgabe #361 :: Lösung #4

5 Lösungen Lösungen öffentlich
#361

Fröhliche Zahlen (Happy Number)

Fortgeschrittener - C# von JKooP - 28.02.2021 um 10:24 Uhr
Von einer fröhlichen Zahl spricht man, wenn eine natürliche Ausgangszahl (Integer)
nach einer bestimmten Iterationsvorschrift am Ende den Zielwert 1 hat.

Die Iterationsvorschrift hier:
Die Summe der Quadrate aller Ziffern einer Zahl.
Wiederholen des Prozesses mit der neu entstandenen Zahl, bis am Ende
das Ergebnis entweder 1 (true) ist oder die Schleife unendlich weiterläuft (false).

Beispiel Glückliche Zahl:
Zahl 19
1² + 9² = 82
8² + 2² = 68
6² + 8² = 100
1² + 0² + 0² = 1

Beispiel unendlich:
Zahl 2
2² = 4
4² = 16
1² + 6² = 37
3² + 7² = 58
5² + 8² = 89
8² + 9² = 145
...

Aufgabe 1 (mittel):
Erstelle eine Methode/Funktion, die als Ergebnis bei einer Glücklichen Zahl den Wert true
und ansonsten false zurückgibt. Dabei können mehrere Schleifen ineinander verschachtelt werden.

Aufgabe 2 (schwieriger):
Wie Aufgabe 1, aber mit nur einer Schleife.

Viel Spaß
#4
vote_ok
von smutjes (20 Punkte) - 19.05.2021 um 08:25 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _08Uebungen
{
    class GluecklicheZahl
    {
        public static void Raten()
        {
            string userEingabeString = "";
            int userEingabeInt = 0;

            do // Die do-While Schleife ist optional und kann auch mit einem If-Statement gelöst werden
            {
                Console.Write("Geb eine Zahl ein: "); 
                Console.Clear(); Console.WriteLine("Du darfst nur Zahlen eingeben!");                
            } while (!int.TryParse(userEingabeString = Console.ReadLine(), out userEingabeInt)); // Prüft ob die userEingabe

            int zaehler = 0;    // Zähler um eine unendliche Schleife zu unterbrechen      
            int zwischenErgebnis = 0;

            do // Hauptschleife
            {
                zwischenErgebnis = 0; // Setzt das Ergebnis bei jedem Schleifendurchgang wieder auf 0 zurück
                int[] intArray = new int[userEingabeString.Length]; // Erstellt ein Int Array mit der Länge der eingegebenen Zahl
                for (int i = 0; i < userEingabeString.Length; i++) // Ruft jede Stelle der userEingabe auf...
                {
                    intArray[i] = Convert.ToInt32(userEingabeString[i].ToString()); // ..macht zuerst aus dem Char einen String,
                                                                                    // dann daraus eine Int  und legt sie einzeln
                                                                                    // in das intArray ab
                    zwischenErgebnis += (intArray[i] * intArray[i]); // Multipliziert jede Zahl im Array mit sich selbst und addiert diese
                                                             // dann als Ergebnis
                }
                zaehler++; // Zählt den Zähler um eins hoch
                userEingabeString = zwischenErgebnis.ToString(); // Überschreibt die userEingabe mit dem Ergebnis für den nächsten Schleifendurchlauf
            } while (zwischenErgebnis != 1 && zaehler < 1000); // Wenn das Ergebnis nicht 1 ist und der Zähler unter 1000 ist läuft die Schleife weiter

            if (zaehler >= 1000)
            {
                Console.WriteLine($"\n\t{userEingabeInt} ist keine Glückliche Zahl!");
            }
            else
            {
                Console.WriteLine($"\n\t{userEingabeInt} ist eine Glückliche Zahl!");
            }
        }
    }
}

Kommentare:

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

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

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.