Hello. Ich möchte die am häufigsten vorkommende Viererzahlenfolge in π finden. Dazu benutze ich die Klasse String. Wie mache ich das?
Hilfe!!
Hilfe!!
Und was machst du, wenn die gesuchte Vierergruppe nicht an der Position 0-3, sondern 1-4, oder 2-5 oder 3-6 liegt?Pi ist zwar unendlich, aber vereinfacht werden genug Nachkommastellen angenommen.
Diese werden in Gruppen zu je 4 Zahlen eingeteilt. Über diese Arrays dann iterieren und aufaddieren wie oft diese Vierer-Zahlenfolge erscheint. "1415" (Substring Position 0-3) wäre 1x, "9265" (Substring Pos. 4-7) 1x, ..."0679" nur 1x,...."8521" nur 1x,.... (mit mehr Nachkommastellen dürften sich die Anzahlen an Treffern aber erhöhen. Und bei drei Wochen Studium ist eine Kenntnis von Datenstrukturen eher nicht vorauszusetzen)
das Prinzip beim Iterieren und Zählen der identischen Viererelemente wird das wohl nicht ändern. Man braucht übrigens mind. 10.000 Viererkombinationen (10^4) und damit 40.000 Nachkommastellen um mehrfache Viererkombination zu entdecken (siehe http://www.pi-zahl.de/ für 1 Million NKS und z.B. "3677" zum Suchen und Nachzählen)nicht an der Position 0-3, sondern 1-4, oder 2-5 oder 3-6 liegt
Das ist zwar hübsch, aber nach drei Wochen Studium wohl kaum verständlich.The power of streams
pi
vorkommen.int maxAnzahlVorkommen = -1; // zu niedriger Wert
String folgeMaxAnzahlVorkommen = "NIX"; // unsinniger Wert
for (int zahl = 0; zahl <= 9999; zahl++) {
String zahlVierstellig = String.format("%04d", zahl);
System.out.println(zahlVierstellig) // nur zum Testen
// bestimme, wie oft zahlVierstellig in pi vokommt.
// ist dies öfter als das bisherige maximum, merke dir die Anzahl (in maxAnzahlVorkommen) und die zugehörige Folge (in folgeMaxAnzahlVorkommen).
}
System.out.println(folgeMaxAnzahlVorkommen + " kommt am meisten vor: " + maxAnzahlVorkommen);
Das war auch Absicht, ich schreib dem TE doch nicht die LösungDas ist zwar hübsch, aber nach drei Wochen Studium wohl kaum verständlich.
Das war auch eher als Zusatzinfo für den TE gedachtdas Prinzip beim Iterieren und Zählen der identischen Viererelemente wird das wohl nicht ändern. Man braucht übrigens mind. 10.000 Viererkombinationen (10^4) und damit 40.000 Nachkommastellen um mehrfache Viererkombination zu entdecken (siehe http://www.pi-zahl.de/ für 1 Million NKS und z.B. "3677" zum Suchen und Nachzählen)
n=2
, dann könntest du es so angehen: public static void main(String[] args) {
String pi = "3.14159265358979323846264338327950288419716939937510";
int n = 2;
int max = 0;
String maxString = null;
for (int i = 0; i < Math.pow(10, n); i++) {
String x = String.format("%0" + n + "d", i);
int tmax = 0;
for (int j = 0; j < pi.length() - n; j++) {
if (x.equals(pi.substring(j, j + n))) {
tmax++;
}
}
if (tmax > max) {
max = tmax;
maxString = x;
}
}
System.out.println(n);
System.out.println(max);
System.out.println(maxString);
}
Das ist zwar hübsch, aber nach drei Wochen Studium wohl kaum verständlich.
Es ist auch möglich, sämtlche Folgen von "0000" bis "9999" durchzugehen und zu überprüfen, wie oft sie in dem Stringpi
vorkommen.
Dann merkt man sich, was das bisherige maximum war und bei welcher Folge dieses aufgetreten ist.
Dafür sind keine "Datenstrukturen" notwendig; die Laufzeit wird natürlich etwas schlechter sein als bei raffinierterer Programmierung - das sollte aber nach drei Wochen Studium keine Rolle spielen.
Dies könnte grob folgendermaßen aussehen:
Java:int maxAnzahlVorkommen = -1; // zu niedriger Wert String folgeMaxAnzahlVorkommen = "NIX"; // unsinniger Wert for (int zahl = 0; zahl <= 9999; zahl++) { String zahlVierstellig = String.format("%04d", zahl); System.out.println(zahlVierstellig) // nur zum Testen // bestimme, wie oft zahlVierstellig in pi vokommt. // ist dies öfter als das bisherige maximum, merke dir die Anzahl (in maxAnzahlVorkommen) und die zugehörige Folge (in folgeMaxAnzahlVorkommen). } System.out.println(folgeMaxAnzahlVorkommen + " kommt am meisten vor: " + maxAnzahlVorkommen);
Begrenzen wir mal PI auf ~ 50 Stellen undn=2
, dann könntest du es so angehen:
Java:public static void main(String[] args) { String pi = "3.14159265358979323846264338327950288419716939937510"; int n = 2; int max = 0; String maxString = null; for (int i = 0; i < Math.pow(10, n); i++) { String x = String.format("%0" + n + "d", i); int tmax = 0; for (int j = 0; j < pi.length() - n; j++) { if (x.equals(pi.substring(j, j + n))) { tmax++; } } if (tmax > max) { max = tmax; maxString = x; } } System.out.println(n); System.out.println(max); System.out.println(maxString); }