Ich bin einfach zu blöd..

Status
Nicht offen für weitere Antworten.

Kremsn

Mitglied
einen einfachen Pseudocode in Java umzusetzen. Die Aufgabe: Der Alorithmus soll aus einer Folge X von N Zahlen die maximale Summe aller Elemente in einer Zusammenhängenden Teilfolge berechnen.

Für die Eingabefolge X[1..10]

{31, -41, 59, 26, -53, 58, 97, -93, -23, 84}

ist die Summe der Teilfolge X[3..7] mit Wert 187 die Lösung des Problems.


der Pseudocode:

maxtsum:=0;
for u:=1 to N do
for o:=u to N do
begin
{bestimme die Summe der Elemente in der Teilfolge X[u..o]}
Summe:= 0
for i := u to o do Summe := Summe + X;
{bestimme den größeren der beiden Werte Summe und maxtsume}
maxtsumme := max(Summe, maxtsumme)
end

und mein Quellcode sieht dann so aus:

Java:
public class Teilsumme {
	
	static int Teilsum(int[] array){
		
		int maxtsum = 0;
		
		for(int u = 1; u< array.length; u++){
			
			for (int o= u; o<array.length; o++){
				
				maxtsum +=array[o];
			
					
				int summe = 0;
				
				for (int i = u; i<=o; i++){
					
					
					summe =+ array[i];
					
					
					if (maxtsum < summe)
						 maxtsum=summe;
					
					}
					
				}
			}
		return maxtsum;
		}
		
				
		
		
		
public static void main(String[] args){
	
	int Teilsum = Teilsum(new int[]{31,-41,59,26,-53,58,97,-93, -23, 84});
	System.out.println(Teilsum);
	
	
}
	}

Liegt wahrscheinlich weniger daran, dass mein Java schlecht ist, als vielmehr daran, dass ich die Funkionsweise des Algoritmus nicht peile.

Wär echt dankbar für Hilfe
 

ck2003

Mitglied
Java:
static int teilsum(int[] array) {//methoden lieber klein schreiben
		int maxtsum = 0;
		for (int u = 0; u < array.length; u++) { // Die erste Stelle in arrays ist die 0
			for (int o = u; o < array.length; o++) {

				// maxtsum +=array[o]; falsch, du sollst in maxtsum die größte teilsumme speichern. die berechnest du
				// aber erst unten in Zeile 10-12, hier veränderst du jedesmal dein bisher gefundenes ergebnis

				int summe = 0;
				for (int i = u; i <= o; i++) {
					summe += array[i]; // nicht =+
				}
				// es reicht, wenn du das überprüfst, wenn du die teilsumme komplett berechnet hast
				if (maxtsum < summe)
					maxtsum = summe;
			}
		}
		return maxtsum;
	}
 

Kremsn

Mitglied
Hi ,

danke für deine Hilfe, hat geklappt. Aber warum ist im Pseudocode zwischen der 2.ten und der 3.ten Schleife vermerkt ich soll die Elemente der Teilsumme X[u..o] berechnen, wenn der 2.ten und 3.ten Schleife doch garnix gemacht werden muss? Das hat mich durcheinander gebracht
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben