kostenloser Webspace werbefrei: lima-city


scanline-algorithmus

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    nicolas-k

    nicolas-k hat kostenlosen Webspace.

    import java.util.Scanner;
    
    class Main {
    	public static void main(String[] args){
    		
    		Scanner in = new Scanner(System.in);
    		int testinstanzen = in.nextInt();
    		
    				
    							
    			for (int i = 1; i <= testinstanzen; i++) {
    				
    				
    				
    				int n = in.nextInt();						//anzahl datenpunkte
    				int[] datenpunkte = new int[n];
    				//einlesen
    				for (int j = 0; j < n; j++) {
    					datenpunkte[j] = in.nextInt();
    				}
    				System.out.println(scan_line(datenpunkte));
    				
    			}			
    			
    	}		
    			
    				
    			
    			
    			//scan-line algorithm
    			public static int scan_line(int[] datenpunkte){
    				
    				
    				int actualmax = 0;
    				int index = 0;
    				int scanmax=0;
    				boolean exhausted = false;
    				
    			while(!exhausted){
    				
    		
    				if (scanmax + datenpunkte[index+1] > 0) {
    					scanmax = scanmax + datenpunkte[index+1];
    				}
    				
    				
    				else{
    					scanmax = 0;
    				}
    				
    				
    				//update actualmax
    				actualmax = Math.max(actualmax, scanmax);
    			
    				
    				index=index+1;
    				
    				//wenn der zeiger auf dem letzten element steht, so muss abgebrochen werden
    				if (index+1 == datenpunkte.length) {
    					exhausted = true;
    				}
    				
    			}
    			return actualmax;
    	}
    		
    }



    Eingabe in der console(copy paste)
    2
    32 -2 4 4 0 -1 5 -3 2 -2 -5 4 -12 1 -6 1 2 8 -1 3 -4 -2 -5 2 -5 2 -1 1 4 -2 6 2 -4
    10 -5 -1 -4 -2 -2 -9 -10 -2 -3 -4


    warum terminiert dieser algorithmus erst, nachdem ich noch enter drücke?
    ich versteh die welt nicht mehr!!!


  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Mir ist nicht ganz klar, was der Code tun soll. Die Bezeichnung scan_line() ist dabei auch nicht gerade aufschlussreich.

    Aber ich habe festgestellt, dass wenn du den Zeilenumbruch nach deiner 2 weglässt, musst du nicht nochmal Enter drücken.
    Also hast du die Eingabe

    2 32 -2 4 4 0 -1 5 -3 2 -2 -5 4 -12 1 -6 1 2 8 -1 3 -4 -2 -5 2 -5 2 -1 1 4 -2 6 2 -4 10 -5 -1 -4 -2 -2 -9 -10 -2 -3 -4
  4. Autor dieses Themas

    nicolas-k

    nicolas-k hat kostenlosen Webspace.

    der algorithmus ermittelt die maximale summe innerhalb der zahlenkette :)

  5. Hallo nicolas-k,

    ich konnte jetzt keine ungewöhnliches Verhalten feststellen.
    Du hast 3 Eingabezeilen und musst folglich auch dreimal Enter drücken. Der Grund ist, dass Du eine Eingabezeile ja solange editieren kannst solange nicht Enter gedrückt wurde. Erst wenn man Enter drückt gilt die Eingabe als abgeschlossen und der Eingabepuffer wird geflusht so dass die Eingabe dem Programm zur Verfügung steht.
    Wenn Du die Daten aus einer Datei einliest wäre das anders.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!