Servus Community,
Ich habe ein Problem. Ich möchte ein altes Beispiel schöner umprogrammieren und scheitere daran. Zur Angabe, ich soll eine Methode schreiben die berechnet ob es mit Addition von maximal 3 Elementen aus dem Array möglich ist den genauen Wert sum zu erzielen.
Hier mein Ansatz:
Code:
public class Summe
{
public Summe()
{
}
public boolean istSumme(int sum, int[] a)
{
Arrays.sort(a);
for (int i = 0; i < a.length;i++)
{
if(a[i] > sum)
{
return false;
}
if (a[i] == sum)
{
return true;
}
if (a[i] < sum)
{
int aktuelleSum = a[i];
int zaehler = 1;
for (int j = 1; j < a.length-1; j++)
{
if (((aktuelleSum+a[j]) <= sum) && (a[i] != a[j]))
{
aktuelleSum += a[j];
zaehler++;
if ((aktuelleSum == sum) && (zaehler <= 3))
{
return true;
}
return false;
}
}
}
}
return false;
}
}
Ich weiß selber wo es hängt dei sortierte Array berechnet immer ab dem 2ten Wert und springt nicht auf den 3ten. Brauche ich eine 3te forschleife die beim 3ten Wert beginnt?
Mhmm, ich sehe nicht so wirklich was du da vorhast aber muss die zweite Schleife nicht bei i+1 beginnen und die dritte dann bei j+1. Und müssen nicht alle bis <a.length laufen ? Oder hast du einen anderen Algorithmus im Kopf den ich gerade nicht erkenne ?
Mhmm, ich sehe nicht so wirklich was du da vorhast aber muss die zweite Schleife nicht bei i+1 beginnen und die dritte dann bei j+1. Und müssen nicht alle bis <a.length laufen ? Oder hast du einen anderen Algorithmus im Kopf den ich gerade nicht erkenne ?
Danke für die schnell Antwort. Ja die Zahlen dürfen nur 1 mal vorkommen also dieselbe.
So würde es auch gehen, aber ich möchte so programmieren dass ich falls ich die Angabe auf 4 Elemente ändere nicht noch mehr erhöhe sondern nur den zähler umschreiben muss. Gibts da eine andere Lösung?
Code:
public class Summe
{
public Summe()
{
}
public boolean istSumme(int sum, int [] a)
{
for (int i = 0; i < a.length; i++)
{
if (a[i] == sum)
{
return true;
}
}
for (int i = 0; i < a.length-1; i++)
{
for(int j = 1; j < a.length; j++)
{
if ((a[i] + a[j]) == sum && a[i] != a[j])
{
return true;
}
}
}
for (int i = 0; i < a.length-2; i++)
{
for(int j = 1; j < a.length-1; j++)
{
for(int k =2; k < a. length; k++)
{
if (((a[i]+a[j]+a[k]) == sum) && (a[i] != a[j] && a[j] != a[k] && a[i] != a[k]))
{
return true;
}
}
}
}
return false;
}
}