IT aufgabe

Status
Nicht offen für weitere Antworten.

michi.0152

Mitglied
hallo wir haben heute in der Schule in Informatik folgende Aufgabe gekriegt die wir mittels Java lösen sollen:

Die ersten sieben Ziffern sind in der natürlichen Reihenfolge 1,2,3,4,5,6,7 aufgeschrieben. Die Ziffern kann man nebeneinander stellen oder sie mit + oder - zu einem Term verbinden:

Bsp:1+23-4+56-7=69

Implementieren sie eine Methode die einen Term berechnet, der den Wert 40 hat

Nun sitze ich ziemlich verzweifelt da und weiß mir nicht zu helfen.

Ich wäre euch für jede Hilfe dankbar!!
 
Zuletzt bearbeitet von einem Moderator:

ARadauer

Top Contributor
Bitte frag mal einen Lehrer was man da genau lernen soll...

Seltsame Aufgaben würde ich mit seltsamen Lösungen entegegenkommen :)


1-2-3+45+6-7 = 40

Java:
import java.io.IOException;
import java.util.Random;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Rechner {

	public static void main(String[] args) throws IOException, ScriptException {

		
		int[] numbers = {1,2,3,4,5,6,7};

		ScriptEngineManager factory = new ScriptEngineManager();
		ScriptEngine engine = factory.getEngineByName("JavaScript");
		
		Random rnd = new Random();
		
		int ergebnis = 0;
		while(ergebnis!=40){
			StringBuffer formel = new StringBuffer();
			for(int i = 0; i < numbers.length-1; i++){
				formel.append(numbers[i]);
				int zeichen = rnd.nextInt(3);
				switch (zeichen) {
				case 0:
					formel.append('+');
					break;
				case 1:
					formel.append('-');
					break;
				default:
					break;
				}	
				
			}
			formel.append(numbers[numbers.length-1]);
			
			
			
			engine.eval("var v = eval('"+formel.toString()+"')");
			double d =(Double) engine.get("v");
			ergebnis = (int)d;
			System.out.println(formel +" = "+ergebnis);
		}
		
		
		


	}
}
btw: das ist sicher keine gute Lösung ;-)
 

michi.0152

Mitglied
könntest du mir auch verraten welche mathematische Theorie dahinter liegt. Da ich mir sonst nicht erklären kann wie du drauf gekommen bist.
 

diggaa1984

Top Contributor
der ablauf is wie folgt:

Code:
solange das ergebnis nicht erzielt wurde:
    für alle zahlen aus dem Feld, [COLOR="Red"]ausser der letzten[/COLOR]
        füge aktuelle zahl aus dem feld zur formel hinzu
        ermittle eine zufallszahl von 0-2
        wenn 0 .. dann füge + Operator ein
        wenn 1 .. dann füge - Operator ein
        wenn was anderes .. dann mach nix

    hänge letzte zahl aus dem feld an die formel

    berechne den term (hier hat er getrickst^^)

auf deutsch .. er probiert solange bis es passt ^^
Gibt man zufällig eine Zahl an die Größer ist als die Zahl, welche sich durch stumpfes Aneinanderreihen der einzelnen Zahlen ergibt, so hast du eine Endlosschleife^^
 

michi.0152

Mitglied
ja das habe ich schon raus kriegen können, aber mein Problem ist , das ja der Scriptenginemanager eigentlich die Hauptarbeit macht. und wie du drauf gekommen bist ihn zu verwenden
 

Landei

Top Contributor
Mann, warum so umständlich?

Java:
public class PlusMinus {

    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(new Integer[]{1,2,3,4,5,6,7});
       plusMinus(list, "", 0, 40);
    }

    private static void plusMinus(List<Integer> list, String path, int sum, int goal) {
        if(list.isEmpty()) {
            if(sum == goal) System.out.println(path);
        } else {
           int number = 0;
           for(int i = 0; i < list.size(); i++) {
               number = 10*number + list.get(i);
               List<Integer> rest = list.subList(i+1, list.size());
               plusMinus(rest, path + "+" + number, sum + number, goal);
               plusMinus(rest, path + "-" + number, sum - number, goal);
           }
        }
    }
}

Code:
+1-2-3+45+6-7
-1-2-3+45-6+7
+12+34-5+6-7
+12-34-5+67
-12+34+5+6+7
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben