Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich muss berechnen, ob sich eine übergebene Zahl durch 1² + 2² +..., bzw durch 2² +...,...3³ +... darstellen lässt. Bei z.B. 4 kommt aber das richtige Ergebnis nicht...kann jemand helfen?
Java:
public static boolean check(long number) {
boolean isPowerNumber = false;
long x = 1;
long pows = 1;
while (isPowerNumber == false) {
if (pows < number) {
pows = pows + pow(x + 1);
} else if (pows == number) {
isPowerNumber = true;
} else if (pows > number && pow(x) < number) {
x++;
} else {
break;
}
}
return isPowerNumber;
}
public static long pow(long x) {
long power = (long) Math.pow(x, x);
return power;
}
ich muss berechnen, ob sich eine übergebene Zahl durch 1² + 2² +..., bzw durch 2² +...,...3³ +... darstellen lässt. Bei z.B. 4 kommt aber das richtige Ergebnis nicht...kann jemand helfen?
Java:
public static boolean check(long number) {
boolean isPowerNumber = false;
long x = 1;
long pows = 1;
while (isPowerNumber == false) {
if (pows < number) {
pows = pows + pow(x + 1);
} else if (pows == number) {
isPowerNumber = true;
} else if (pows > number && pow(x) < number) {
x++;
} else {
break;
}
}
return isPowerNumber;
}
public static long pow(long x) {
long power = (long) Math.pow(x, x);
return power;
}
habs grad versucht...das problem is denk ich auch, dass er das ganze nur einmal rechnet, aber irgendwie check ich grad nicht, wie ich das anders machen kann...
ok hab ich gemacht...habs jetzt immerhin schon, dass pows richtig hochzählt, also 1+4+27 etc. aber er kommt irgendwie nicht in den zweig dass pow>number
Super du hast schon mal erkannt, dass pows mit 0 beginnen muss.
Nun der nächste Schritt:
Hast du die Ausgabe durchgelesen? Was passiert denn da mit deinem Rundenzähler?
Hast du die Ausgabe nachgerechnet? Die Quadratzahlen kann man schon ein bisschen kennen!
Und wenn die Zahlen passen würden (!worauf du ja schon hingewiesen wurdest):
Was passiert nun bei Runde 6 und danach, bzw. was SOLLTE nun passieren? Ein IF ändert sich nicht, wenn man die Werte nicht ändert!
So irgendwie hättest du es am liebsten kleingeschnitten und vorgekaut, nicht?
PS: teste doch mit Zahlen die du überschauen kannst: z.b. mit 14 oder 15 und 16 (3 unterschiedliche Ergebnisse!)
PS: Damit du etwas zum kontrollieren hast:
Bei all diesen Zahlen muss TRUE raus kommen bei allen anderen (unter 100) FALSE:
1
4
5
9
13
14
16
25
29
30
36
41
49
50
54
55
61
64
77
81
85
86
90
91
100
Ist die Frage, ob man Sachen quadratisch darstellen kann (1²+2²+3²...n²) bzw (1²+3²+5²+...+n²)
oder generell in n^m (m > 1; n,m∈N) Schreibweise darstellen kann? Oder nur 1+2²+3³+4^4 etc.
habe gerade auch versucht die Aufgabe zu lösen. Am Anfang war ich bischen irritiert was in der Aufgaben stellung gemeint wurde. Ich habe es jetzt so verstanden und umgesetzt das folgende Bedingungen gelten müssen. Ist dies so richtig oder habe ich das falsch verstanden ? Wenn das so richtig ist verstehe ich nicht wie bei dem letzten Tip von AquaBall die Zahl 29 berechnet wurde ?
1.Bedingung:
// Zahl darstellbar durch 1^2 , 2^2 , 3^2...
2.Bedingung:
// Zahl darstellbar durch 1^2 + 2^2 + 3^2...
3.Bedingung:
// Zahl darstellbar durch 1^2 + 2^2 || 2^2+3^2 || 3^2+4^2....
... Wenn das so richtig ist verstehe ich nicht wie bei dem letzten Tip von AquaBall die Zahl 29 berechnet wurde ?
...
// Zahl darstellbar durch 1^2 + 2^2
Also ich habe die 3 Bedingung nicht so verstanden wie von dir beschrieben. Ich komme halt an alle Werte dran nur die 29 kommt nicht in meiner Liste vor.
Also bei meinem Code ist das im moment so das der in den Runden wie folgt rechnet damit die 3 Bedingung gilt.
1. Runde 1^2+2^2+3^2+4^2....usw
2. Runde 2^2+3^2+4^2+5^2....usw
3. Runde 3^2+4^2+5^2+6^2....usw
oder war es so gemeint das man direkt mit 2^2 anfängt ohne 1^2
Hier ist mal mein Code dazu:
Java:
public static long pow(long x) {
long power = (long) Math.pow(x, 2);
return power;
}
public static void main(String[] args) {
boolean isPowerNumber = false;
long Runde = 1;
long Summe = 0;
long Summe2= 0;
long Summe3= 0;
long Nummer = 55;
while (isPowerNumber == false){
// für 1^2 , 2^2 , 3^2
if (Summe < Nummer){
Summe = pow(Runde);
}
// für 1^2 + 2^2 + 3^2
if (Summe2 < Nummer){
Summe2 = Summe2 + pow(Runde);
}
// für 1^2 + 2^2 ... 2^2+3^2 ... 3^2+4^2
if (Summe3 < Nummer){
Summe3 = pow(Runde) + pow(Runde-1);
}
// falls einer der Summen gleich Nummer true setzen
if (Summe == Nummer || Summe2 == Nummer || Summe3 == Nummer) {
isPowerNumber = true;
System.out.println("Die zahl ist darstellbar");
}
// falls einer der Summen größer als Nummer ist abrechen
if (Summe > Nummer || Summe2 > Nummer || Summe3 > Nummer){
break;
}
System.out.println("Runde: " + Runde + " Summe: " + Summe + " Summe2: " + Summe2 + " Summe3: " + Summe3 + " Nummer: " + Nummer);
Summe3 = 0;
Runde++;
}
}