Anzahl der Gewichtscheiben berechnen

The Pi

Mitglied
Hallo Leute!

Ich hoffe mir kann jemand helfen. Ich möchte gerne ein Programm erstellen, das mir berechnet, wie viele Gewichtscheiben ich auf einer Langhantel brauche.

Zum Beispiel:
Ich habe eine Langhantel die 8 kg wiegt. Ich würde gerne mit 30 kg trainieren. Dann berechnet mir das Programm, dass ich eine 10 kg Scheibe und eine 1 kg Scheiben an jeder Seite der Langhantel brauche.

Natürlich muss ich ja auch einberechnen, dass jedes Studio nicht jede Scheibe zur Verfügung hat und es zum Beispiel nur 1 kg, 2 kg, 5 kg und 10 kg Scheiben hat.
Hat irgendjemand eine Idee wie man hier rechnen muss? Ich habe da nämlich keinen Plan wie ich da rangehen soll.

Mit freundlichen Grüßen,
The Pi ;)
 

Phänox

Aktives Mitglied
Also du meinste das der Benutzer zB eingibt mit wie viel gewicht er Trainieren will und wie viel die Langhantel wiegt und man dann als ausgabe hat wie viel an eine seite muss ?
 

The Pi

Mitglied
Genau so meinte ich das.

Ich gebe ein, dass ich mit z.B. 40 kg trainieren will und die Langhantel 10 kg wiegt. Das Programm gibt dann aus, das an jede Seite ein 5 und eine 10 kg Scheibe dran kommen...
 

Phänox

Aktives Mitglied
Alles klar
So könnte der Anfang der Methode aussehen als kleiner Denkanstoß
Java:
public void gewichtAusrechnen(int langhantelGewicht,int trainierGewicht)
    {
        int restGewicht = trainierGewicht - langhantelGewicht;
    }
Als Variablen der Klasse kannst du dann die gewichte machen als 1kg 2kg usw.
 
X

Xyz1

Gast
Eigentlich schreibe ich keine Lösung(en), aber ich finde die Aufgabe ganz interessant, auch das das Problem (schwach) NP-vollständig ist:
Java:
    static void scheiben() {
        System.out.print("Gesamt-Gewicht (in kg): ");
        int g = Integer.parseInt(new Scanner(System.in).nextLine());
        g -= 8; // Stange
        ArrayList<Integer> z = new ArrayList<>();
        scheiben2(z, g);
        System.out.println(8 + " " + z);
    }

    static boolean scheiben2(ArrayList<Integer> z, int g) {
        int count = z.stream().mapToInt(Integer::intValue).sum();
        if (count > g) {
            return false;
        }
        if (count == g) {
            return true;
        }
        for (int i = 0; i < 4; i++) {
            int g2;
            switch (i) {
                case 0:
                    g2 = 10;
                    break;
                case 1:
                    g2 = 5;
                    break;
                case 2:
                    g2 = 2;
                    break;
                case 3:
                    g2 = 1;
                    break;
                default:
                    throw new AssertionError();
            }
            z.add(g2);
            if (scheiben2(z, g)) {
                return true;
            }
            z.remove(z.size() - 1);
        }
        return false;
    }

Code:
Gesamt-Gewicht (in kg): 77
8 [10, 10, 10, 10, 10, 10, 5, 2, 2]

Übersah ich etwas? lässt sich auch noch besser schreiben.
 

The Pi

Mitglied
Ich habe eine viel einfachere Methode gefunden:
Java:
double gewicht = 100, gewichthantel = 10;
        int[] gewichte = {10, 5, 2, 1};
        boolean wiederholen = false;
        String ausgabe = "";

        gewicht = gewicht - gewichthantel;
        gewicht = gewicht / 2;

        for (int i = 0; i < gewichte.length; i++) {
            do {
                if (gewicht - gewichte[i] >= 0) {
                    gewicht = gewicht - gewichte[i];
                    if (ausgabe == "") {
                        ausgabe = ausgabe + String.valueOf(gewichte[i]) + " ";
                    } else {
                        ausgabe = ausgabe + " " + String.valueOf(gewichte[i]) + " ";
                    }
                    wiederholen = true;
                } else {
                    wiederholen = false;
                }
            } while (wiederholen);
        }

        System.out.println(ausgabe + "------ " + ausgabe);
 

Phänox

Aktives Mitglied
Also ich bin eher noch anfänger ^^ und daher versteh ich deinen Code nicht ganz :D aber ich schaffe das selbe in weniger code :) und ist etwas einfacher zu verstehen ^^ hab mal die selben zahlen genommen wie du :)
Java:
public static void gewichtAusrechnen(int langhantelGewicht,int trainierGewicht)
    {
        int restGewicht = (trainierGewicht - langhantelGewicht)/2;
        ArrayList<Integer> gewichte = new ArrayList<Integer>();
        while(restGewicht!=0)
        {
            if(restGewicht>=10)
            {
                restGewicht = restGewicht -10;
                gewichte.add(10);
            }
            else if(restGewicht>=5)
            {
                restGewicht = restGewicht -5;
                gewichte.add(5);
            }
            else if(restGewicht>=2)
            {
                restGewicht = restGewicht -2;
                gewichte.add(2);
            }
            else if(restGewicht==1)
            {
                restGewicht = restGewicht -1;
                gewichte.add(1);
            }
        }
        System.out.println("Wenn Sie "+trainierGewicht+" trainieren wollen und ein Stangengewicht von "+
        langhantelGewicht+" haben"+"brauchen Sie jeweils auf beiden seiten: ");
        System.out.println(gewichte);
}}
Java:
Wenn Sie 146 trainieren wollen und ein Stangengewicht von 8 habenbrauchen Sie jeweils auf beiden seiten: 
[10, 10, 10, 10, 10, 10, 5, 2, 2]
 

Phänox

Aktives Mitglied
@The Pi wenn du das noch hinzufügst
Java:
for (int i = 0; i < gewichte.length; i++) {
            if(gewicht==0)// das hier
                break;
            do {
               
                if (gewicht - gewichte[i] >= 0) 
                {
                    gewicht = gewicht - gewichte[i];
                    if (ausgabe == "") 
                    {
                        ausgabe = ausgabe + String.valueOf(gewichte[i]) + " ";
                    } else 
                    {
                        ausgabe = ausgabe + " " + String.valueOf(gewichte[i]) + " ";
                    }
                    wiederholen = true;
                } 
                else 
                {
                    System.out.println("test");
                    wiederholen = false;
                   
                }
            } while (wiederholen);
        }

        System.out.println(ausgabe + "------ " + ausgabe);
   
    }
ersparst du dir unnötige durchläufe ^^
 
X

Xyz1

Gast
Ich nochmal^^
@Tobse , @Phänox und @The Pi hat recht, das ganze zu kompliziert gedacht^^
Das Problem ist NICHT (schwach) NP-vollständig, denn
gesucht ist ein Greedy-Algorithmus für ein Maximierungsproblem, wobei
die "Scheibenmengen" 1, 2, 5, 10 linear (un-)abhängig sind (und ein Matroid bilden).

Also nochmal, der greedy-Ansatz kann gewählt werden, und
es ist nur eine Schleife notwendig, eine Schleife in einer Schleife ist nicht notwendig?

Also das ist,
Java:
    static boolean scheiben2(ArrayList<Integer> z, int g1) {
        int count = z.stream().mapToInt(Integer::intValue).sum();
        if (count > g1) {
            return false;
        }
        if (count == g1) {
            return true;
        }
        for (int i = 0; i < 4; i++) {
            int g2;
            switch (i) {
                case 0:
                    g2 = 10;
                    break;
                case 1:
                    g2 = 5;
                    break;
                case 2:
                    g2 = 2;
                    break;
                case 3:
                    g2 = 1;
                    break;
                default:
                    throw new AssertionError();
            }
            z.add(g2);
            if (scheiben2(z, g1)) {
                return true;
            }
            z.remove(z.size() - 1);
        }
        return false;
    }

abgesehen davon, dass das switch und das .sum() überflüssig ist,
unnötig.

Es wäre aber auch möglich, das meine mathematische Erklärung "Pfusch" ist^^
Nicht zu weit aus dem Fenster lehnen, liegt zu weit zurück^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
BeginnerJava Anzahl der 5 % - Zuwächse ausgeben Allgemeine Java-Themen 6
M Wie übergebe ich den Zähler für die Anzahl Rekursionsschritte korrekt? Allgemeine Java-Themen 2
S BlockingQueue mit dynamischer Anpassung der Anzahl von Producer und Consumer Threads Allgemeine Java-Themen 1
S Iterable<?> anzahl der Element Allgemeine Java-Themen 14
M Java- Bild gewissen Anzahl von Sekunden anzeigen?! Allgemeine Java-Themen 4
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
M Relative Anzahl an verschachtelten Forschleifen Allgemeine Java-Themen 8
P Threads Parallelisierte DB-Abfragen mit variabler Anzahl an Threads Allgemeine Java-Themen 4
Soloeco BubbleSort Anzahl der Vertauschungen Allgemeine Java-Themen 9
J Anzahl geöffneter Plugins Allgemeine Java-Themen 3
A Anzahl an Threads Systemweit Allgemeine Java-Themen 2
J Anzahl von Möglichkeiten zur Verteilung von Kugeln in Behälter Allgemeine Java-Themen 3
P Erste Schritte Dynamische Anzahl von verschachtelten Schleifen Allgemeine Java-Themen 5
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
R Int werte vergleichen und Anzahl Paare ausgeben Allgemeine Java-Themen 4
L Ermitteln der Anzahl an Lösungen von quatratischen Gleichungen (Sieb von Atkin) Allgemeine Java-Themen 1
L Anzahl der Tage eines Monats Allgemeine Java-Themen 3
P Auf die Anzahl der Joins achten beim WS design Allgemeine Java-Themen 1
J Anzahl der Zeichen bei Eingabe begrenzen Allgemeine Java-Themen 5
S Zur Laufzeit Klasse mit einer anzahl von X Objekten erstellen Allgemeine Java-Themen 5
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
P Anzahl vo Einträgen in verschiedenen Sets Allgemeine Java-Themen 3
R Anzahl der gerade gedrückten Tasten Allgemeine Java-Themen 6
J ermitteln der Anzahl der Monate Allgemeine Java-Themen 7
M Anzahl der Durchläufe einer Funktion errechnen Allgemeine Java-Themen 6
G Anzahl Primzahlen im Intervall Allgemeine Java-Themen 3
X Textdatei auf gewünschte Anzahl der Zeilen kürzen Allgemeine Java-Themen 2
M Anzahl Farbwerte (RGB) im Array speichern - Problem Allgemeine Java-Themen 13
N variable Anzahl von Objektinstanzen zur Laufzeit erstellen Allgemeine Java-Themen 4
D unbekannte Anzahl checkboxes Allgemeine Java-Themen 2
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
Iron Monkey Anzahl der Monate ermitteln Allgemeine Java-Themen 17
neonfly Anzahl Zeichen pro Zeile auf der Konsole Allgemeine Java-Themen 8
R ArrayList -- Maximale Anzahl an Elementen Allgemeine Java-Themen 2
O Große Anzahl Bilder laden Allgemeine Java-Themen 7
S Array: Anzahl Elemente mit best. Wert zählen Allgemeine Java-Themen 4
V Java-Objekt. wie groß maximal ? anzahl der einträge Allgemeine Java-Themen 4
M Aus Anzahl Tagen Datum ermitteln Allgemeine Java-Themen 8
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
T Anzahl Tage zwischen zwei Daten - Stunde fehlt? Allgemeine Java-Themen 2
S Anzahl der Stunden in Excel Datei schreiben Allgemeine Java-Themen 2
G Anzahl an Tagen auf Datum addieren Allgemeine Java-Themen 4
MQue Anzahl der Ziffern Allgemeine Java-Themen 13
G Anzahl Tage in Datum umwandeln Allgemeine Java-Themen 13
MQue Anzahl der Kommastellen Allgemeine Java-Themen 6
L Anzahl Tage zwischen zwei Kalenderdaten Allgemeine Java-Themen 5
F Anzahl der nachkommastellen bestimmen nur wie? Allgemeine Java-Themen 10
M Aktualisieren eines Chatprofils (Anzahl Minuten) Allgemeine Java-Themen 4
G Variable Anzahl JTextfleder Allgemeine Java-Themen 3
S Bandbreite/Anzahl Pakete messen Allgemeine Java-Themen 3
V String formatiert ausgeben ( gleiche Anzahl von Ziffern ) Allgemeine Java-Themen 5
padde479 Anzahl Methodenaufrufe Allgemeine Java-Themen 7
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
F Datum mit anzahl tagen berechnen Allgemeine Java-Themen 3
W PrepareStatement und Anzahl der Datensätze Allgemeine Java-Themen 2
rambozola anzahl zeichen in konsole eclipse begrenzt? Allgemeine Java-Themen 5
G anzahl "verwendeter" elemente eines arrays ermitte Allgemeine Java-Themen 2
M Anzahl der Threads pro Programm? Allgemeine Java-Themen 3
R java.lang.String maximale Anzahl der Zeichen Allgemeine Java-Themen 7
V Anzahl der Zeilen in einem File Allgemeine Java-Themen 3
K anzahl laufender Threads Allgemeine Java-Themen 3
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
bittedanke Wie benötigte Bits berechnen (Huffmankodierung) Allgemeine Java-Themen 7
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
ReinerCoder Kombinationsmöglichkeiten der Textfelder berechnen Allgemeine Java-Themen 14
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
C Java Script Pause berechnen Allgemeine Java-Themen 5
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
MaxG. Best Practice Alle Kombinationen berechnen Allgemeine Java-Themen 3
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
N Das große O berechnen Allgemeine Java-Themen 2
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
N Kombinationen beliebiger Größe berechnen Allgemeine Java-Themen 1
B Hirsch-Index berechnen Allgemeine Java-Themen 11
B Umfang berechnen für Polygone Allgemeine Java-Themen 18
C pplet Mitelwert Berechnen Allgemeine Java-Themen 0
J Primzahlen berechnen Allgemeine Java-Themen 13
K F-Verteilung FINV in Java berechnen Allgemeine Java-Themen 4
A Helligkeit eines Bildes berechnen Allgemeine Java-Themen 1
P Methoden Alle Kombinationen aus 2 Karten berechnen Allgemeine Java-Themen 2
C mp3-Lied Dauer berechnen Allgemeine Java-Themen 1
L Winkel eines Vektors berechnen [Anfängerprob] Allgemeine Java-Themen 5
R Threads Taskzeit berechnen Allgemeine Java-Themen 12
S Eclipse Entfernung berechnen Allgemeine Java-Themen 16
T Kreis und sekant schnittpunkt berechnen mit latitude longitude Allgemeine Java-Themen 4
B Java Diffentialgleichungen berechnen Allgemeine Java-Themen 3
W 2D-Grafik Kontrast eines Bildes berechnen Allgemeine Java-Themen 6
T Taylorpolynom berechnen Allgemeine Java-Themen 14
S Erste Schritte Mittelsenkrechte berechnen Allgemeine Java-Themen 3
P Matrix Kurtosis berechnen Allgemeine Java-Themen 40
S Werte aus 2 eindimensionale boolean arrays mithilfe von logischen operatoren berechnen Allgemeine Java-Themen 6
S Teiler Berechnen Allgemeine Java-Themen 6
Kr0e Differenzen von Bildern berechnen - Remote control Allgemeine Java-Themen 2
D md5 berechnen für BufferedImage Allgemeine Java-Themen 5
J bewegliche Feiertage berechnen Allgemeine Java-Themen 7
W Rechnungsbetrag berechnen Allgemeine Java-Themen 2
reibi Checksumme für ein File berechnen Allgemeine Java-Themen 12
M Integral berechnen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben