C# :: Aufgabe #361 :: Lösung #4
5 Lösungen
#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ß
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
von smutjes (20 Punkte)
- 19.05.2021 um 08:25 Uhr
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
Seite 1 von 0
1
