Java Programm : Zehnstellige Zahl durch eigene Ziffern teilen?

5 Antworten

Ich soll in Java ein Programm schreiben

Demnach ist es also deine (Haus-)aufgabe.

Gibt es so ein Programm vielleicht schon irgendwo?

Mit Sicherheit in der Musterlösung deines Lehrers.

Nur wie kann ich dieses Programm jetzt schreiben?

Die Aufgabenstellung hast du ja. - Wie du es löst, bleibt dir offen:

  1. Leicht indem du eine Schleife machst bei der du hoch zählst und jede Stelle per IF-Block prüfst, ob die Kondition erfüllt ist.
  2. Mittel: Du verwendest 'schleife in Schleife', wobei die Äußere Schleife zum Hochzählen dient und die innere anhand der Stellen, die Bedingung Prüft.
  3. "Schwer": Du löst das ganze per Rekursion.

Welche Befehle benötigst du?

  • Schleifen (while, for oder do)
  • Bedingungen (if oder switch case)
  • Modulo zur Erkennung von möglichen Restbeträgen: (%)
  • Inkrement (++)
  • Ganzzahlen-Datentypen: z.B. Long für deine Zahl
  • Text-Datentyp: String

Die Lösung lautet 3816547290

Das sieht mir jedoch nicht nach der 'ersten' Zahl aus, auf die das Zutrifft, sondern irgendeine. (Die letzte nämlich auch nicht)

Mein Ergebnis wäre: 1020005640:

1 /1 = 1
10 /2 = 5
102 /3 = 34
1020 /4 = 255
10200 /5 = 2040
102000 /6 = 17000
1020005 /7 = 145715
10200056 /8 = 1275007
102000564 /9 = 11333396
1020005640 /10= 102000564

Gibt es so ein Programm vielleicht schon irgendwo?

Selber Denken macht schlau.

Alle Kombinationen , welche funktionieren, abspeichern.

Das heißt, du suchst alle Ergebnisse, die auf 1 Zutreffen. Das wären 10 Stück.

Das gleiche machst du für 2. Nochmal 50 Stück.

Aus den beiden könntest du schon filtern, welche nur gehen. Ist ein wenig doof, wegen erstens, aber es bleibt bei 50.

Jetzt kommen noch alle Zahlen von 0-999 dazu, die durch 3 Teilbar sind und die beiden davor auch abdecken können. Das wird schon gar nicht so viel mehr sein. Diese speichst du dir auch ab. Und so machst du immer weiter

Wenn dein Code eingesehen wird ist es Vielleicht hilfreich wenn du weder den String mittels ausprobieren noch die Ganze zahl bruteforced. sondern eine matthematische lösung findest, wenn auch der bruteforce dem computer näher läge.

http://mathepower.com/infoteilbarkeit.html

diese regeln musst du bevolgen dadurch bekommst du nen ansatz.

Ausserdem würde ich dir empfehlen die Schwierigsten stellen zu erst anzugehen.

bzw für jede stelle die einfachste regel zu verwenden

Ganz ehrlich? Ich würde die Zahl als Text zusammenbauen. Mit Textfunktionen bekommst du einfacher Zugriff auf die Ziffern als mit Rest- und Ganzzahlfunktionen. Dazu benötigst du Datentypkonvertierungsfunktionen.

Sicherlich kann man die Aufgabe auch irgendwie rekursiv lösen, aber ich würde einfach eine 10fach verschachtelte Schleife nehmen, die jede Stelle durchrotiert, bis eine Ziffernfolge gefunden wird, die allen Erfordernissen genügt.

Also grob:

for(a=1;a<=9;a++)
{Zahl = a.toString();
if(a%1==0)
{for(b=0;b<=9;b++)
{Zahl = Zahl + b.toString();
if(Links(Zahl,2).toInt % 2 == 0)
...

Woher ich das weiß:Berufserfahrung – Programmierer

Einfach:
Alle Zahlen von 1000000000 bis 9999999999 in einer Schleife durchlaufen. Bei jeder der Reihe nach prüfen, ob Bedingung1, Bedingung2, ... Bedingung 10 erfüllt ist. Sobald eine Bedinung nicht erfüllt ist, abbrechen und zur nächsten Zahl gehen. Wenn alle Bedinungen erfüllt sind, Zahl ausgeben oder speichern. 

Optimiert:
Überlege, wie könnte man das verbessern, so dass möglichst keine unnötigen Vergleiche mehr gemacht werden müssen. Zum Beispiel müsste man die erste Ziffer gar nicht prüfen, da diese immer durch 1 teilbar ist. 

Woher ich das weiß:Berufserfahrung – Jahrzehnte IT Erfahrung, Experte für Kryptowährungen, 🐱

deineSenfgurke  14.09.2016, 11:21

Schöner Bruteforce

1
Nube4618  14.09.2016, 11:43
@deineSenfgurke

Schön nicht, aber Bruteforce :-) Vielleicht programmier ich das mal schnell, nimmt mich wunder wie viele Treffer es gibt. 

0