Ankündigung

Einklappen
Keine Ankündigung bisher.

100g mit mölichst geringen Mützen auf Balkenwaage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    100g mit mölichst geringen Mützen auf Balkenwaage

    hi jungs,

    sitz hier gerade in info 11 GK und hab ne aufgabe aber keine ahnung wie ich die angehen muss:
    also hier mal die aufgabe:

    Auf einer Seite einer balkenwaage soll mögl. genau eine masse von 100gaufgelegt werden.man hat nur einen stapel müzen zur verfügung.
    masse der münzen - http://www.bundesbank.de/bargeld/bargeld_faq_euromuenzen.php#technischen_merkmale

    schreibe ein programm.in java, welches eine möglich gerine anzahl Münzen benennt, mit der man der lösung möglichst nahe kommt!

    Wär nett wenn mir jmd helfen könnte

    Pics hab ich nicht weil schulrechner!

    #2
    push :(

    Kommentar


      #3
      Hmmm

      Ich würde sagen, zuerst die Münzen in nem Array nach Gewicht absteigend sortieren.

      Dann die schwerste nehmen. Die nimmste so oft, wie sie in 100 g reingeht (in dem Fall 100/8,5), also 11 Mal.

      Dann merkste dir den Rest und gehst zur nächst leichteren münzen.

      Du loops den oberen schritt also quasi durch, biste bei der leichtesten bist. Das sollte dann das Ergebnis sein.

      Kommentar


        #4
        Ohne Array ,ziemlich dirty:

        Gewicht = 100



        IntegerWert = Gewicht/8.5

        Gewicht = Gewicht - IntegerWert * 8.5

        IntegerWert = Gewicht/7,5

        Gewicht = Gewicht - IntegerWert * 7,5

        usw.

        Kommentar


          #5
          Wäre es VB.Net würde ich dir schnell etwas schreiben, aber Java ... Ich hasse Java ;|
          Ich würde dabei mit Mod arbeiten und die Münzen zählen

          Kommentar


            #6
            Naja, du musst halt Brute Force sämtlich Kombinationen ausprobieren (und dir merken).

            Leg dir ein statisches Array an mit dem gewicht aller Münzen:

            static final float MASSE = { 2,30, 3.05, 3.92, ...., 8.50 }

            Am besten noch ein paar konstaten, um drauf zugreifen zu können

            static final int MUENZE_1_CENT = 0;
            static final int MUENZE_2_CENT = 1;
            ....
            static final int MUENZE_2_EURO = 7;

            kannst als dann imt MASSE[MUENZE_2_CENT] elegant auf die Masse der 2 Cent münze zugreifen.

            Zum ausprobieren bentutz du Rekursion.

            /**
            * muenzen: speichert alle Münzen, die auf die waage kommen sollen (den index im Masse-array)
            * restlciheMasse: masse, die noch aufgefüllt werden soll (also hächstens 100g)
            * maxMuenze: die größte münze, die bentutz werden darf (Wert zwichen 0 = 1c bis 7 = 2€)
            */
            void berechne(List muenzen, float restlicheMasse, int maxMuenze) {
            // alle möglcihkeiten ausprobieren, d.h. alle erlaube münzen einstezen und benutzen
            for(int i =0; i0) {
            berechne(l, m, i);
            } else {
            if(münzstapelBesserAlsDerLetzte(muenzen)) {
            besterStapel = muenzen;
            }
            }

            so ist das prinzip.

            münzstapelBesserAlsDerLetzte(List zählst du eifnach alle massen zsammen und guckts ob es schick ist.

            den code oben musst du natürlich erwietern, aber die idee so ist rihctig. halt alle fälle suasprobielern.

            HTH

            Kommentar


              #7
              Hab mir deinen Weg nun nicht genau angeschaut, sieht mir aber ziemlich lang aus.

              Code für VB.Net:

              Dim dGewicht() As Double = {8.5, 7.8, 7.5, 5.74, 4.1, 3.92, 3.06, 2.3}
              Dim dGesamtgewicht As Double = 100, dRest As Double = dGesamtgewicht
              Dim iMünzen As Integer = 0
              For i = 0 To 7
              iMünzen += Int(dRest / dGewicht(i))
              dRest = dRest Mod dGewicht(i)
              Next
              MsgBox("Es wurden " & iMünzen & " Münzen mit einem Gesamtgewicht von " & dGesamtgewicht - dRest & "g verwendet")

              Verständnisfrage, was ist die Lösung der Aufgabe:
              12 Münzen mit Gesamtgewicht von 99,26g
              13 Münzen mit Gesamtgewicht von 99,90g

              Also ist eher das Gewicht annähernd an 100g wichtig oder die Anzahl der Münzen

              Edit: MessageBox verändert und zusätzliche Variable hinzugefügt (dGesamtgewicht)

              Kommentar


                #8
                Du hast allerdings alle Münzen vom gleichen Typ. Ich gehe mal davon aus das man auch mischen darf?

                Kommentar


                  #9
                  Trulli postete
                  Du hast allerdings alle Münzen vom gleichen Typ. Ich gehe mal davon aus das man auch mischen darf?
                  Nein, hab ich nicht.
                  Wenn man das Programm ausführt, ist das Ergebnis:
                  11 Münzen vom Wert 2€ á 8,5g (=93,5g)
                  1 Münzen vom Wert 0,20€ á 5,74g (=5,74g)

                  Ergebnis:
                  12 Münzen mit Gewicht von 99,24g

                  Kommentar


                    #10
                    Du hast recht. Trotzdem muss das nicht die beste Lösung sein, da du immer 2€ Münzen benutzt. Kann ja sein, das die Beste Lösung nur aus 50c und 2c Münzen besteht, darauf würdest du nie kommen (da du nicht alles ausprobierst).

                    Kommentar


                      #11
                      Ich hab die Münzen nach Gewicht sortiert. Wenn es wirklich darum geht, möglichst wenige Münzen zu nutzen, ist es die optimale Lösung.

                      Kommentar


                        #12
                        soNGOKU postete
                        schreibe ein programm.in java, welches eine möglich gerine anzahl Münzen benennt, mit der man der lösung möglichst nahe kommt!
                        Kommt darauf an was wichtiger ist: Nahe herankommen oder wenige Münzen zu verwenden.
                        So wie ich es machen würde, wäre das Nahe herankommen das Wichtigste (weil interessant - was wir beide noch nicht berücksichtigt haben ist überrings der Fall, dass es günstiger sein kann über 100g zu kommen und man damit näher an dran ist).
                        Sollte es mehrer Kombinationen mit minimalen Abstand geben, so nimmt man halt die, die weniger Münzen benötigt.
                        Wenn man das "und" streng aussagenlogisch interpretiert wäre das auch der richtige Ansatz. Aber ich weiß es natürlich nicht, wie es gemeint ist.

                        Kommentar


                          #13
                          Ja, habe ich ja auch bereits gesagt, dass die Aufgabenstellung nicht ganz deutlich ist.

                          Ich gehe aber mal von meiner Lösung aus, da sie in der elften GK bestimmt nicht derart kompliziertes machen ;)

                          Wenn doch, sind es einige Zeilen mehr ...

                          Kommentar


                            #14
                            push :) Brauch immernoch hilfe..

                            bin im moment so weit..

                            import java.util.*;

                            public class Muenzen {
                            public Muenzen() {
                            double max = 200;
                            double[] liste = { 2.3, 3.06, 3.92, 4.10, 5.74, 7.50, 7.80, 8.50 };
                            double gew = 0;
                            int x = 7;
                            double fehler=0;
                            while (gew < max) {

                            gew = gew + liste[x];
                            fehler = gew - max;
                            if (liste[x] < fehler) {
                            gew=gew-liste[x];
                            x--;
                            if(x==0){
                            break;}
                            }

                            }
                            System.out.println(gew);
                            System.out.println("Das erreichte Gewicht beträgt: " + gew + "g Und der Fehler beträgt:"+ fehler + "g");

                            }
                            }

                            aber iwie nicht so richtig

                            Kommentar


                              #15
                              double[] gewichte = { 2.3, 3.06, 3.92, 4.10, 5.74, 7.50, 7.80, 8.50 };
                              double maxGewicht = 100;
                              double rest = maxGewicht;
                              int muenzen = 0;
                              for(int i = 0; i

                              Kommentar

                              Lädt...
                              X