Selektierte Zahlen einer Zahlenreihe aus Summe bestimmen

  • Sonstige

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    Selektierte Zahlen einer Zahlenreihe aus Summe bestimmen

    Vorgegeben ist folgende Zahlenriehe:

    1;2;4;8;16;32;64;128;256;512;1024

    Aus dieser Zahlenreihe wurden die folgenen Zahlen selektiert: 8;32;64

    Das Ergebis aus der Summe dieser Zahlen ist: 104

    Wenn nur Anzahl der Zahlen dieser Zahlenreihe sowie die Summe bekannt ist, Also 11 und 104, mir welchem Code oder Formel läßt sich herausfinden, welche Zahlen zuvor selektiert wurden?
    ?(
    Ich antworte mal als nicht-Mathe-Insider:
    Da 1 = 2^0 und 2 = 2^1 usw. gilt, ist der Anfang ja, dass Summe = a x 2^0 + b x 2^1 + … + k + 2^10, wobei die Faktoren a bis k entweder 0 oder 1 sind (also nicht Teil der Summe oder eben doch).
    Jetzt weißt Du, dass Du alle Zahlen ausgeschlossen werden können, die größer als die Summe sind, da alle vorangegangenen in Summe nur Zahl - 1 ergeben können. Also alle Zahlen der Reihe in Summe vor 128 zusammen ergeben 127. Nun wär m.E. der nächste Schritt eine theoretische: in der Darstellung der Zahl in Binärformat kann man die Einzelsummanden ablesen. 1 = 00000001, 2 = 00000010, 4 = 00000100 usw. Und wenn Du dann die Einzelsummanden und die Summe mit AND verbindest und einen Wert > 0 rausbekommst, weißt Du, dass diese Zahl Teil der Summe ist. Hättest Du also 1010011000101 als Summe und würdest diesen Wert mit 2 (00000000000010) per AND verbinden, besteht keine Übereinstimmung an der vorletzten Stelle, es würde also Null rauskommen, daher wüsstest Du, dass die 2 nicht Teil der Summe ist, also nicht selektiert wurde.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Hier 2 kurze VBA Programme:

    Du solltest dich über die logische AND Verknüpfung informieren.

    Visual Basic-Quellcode

    1. Sub test()
    2. Dim z%
    3. z = 104
    4. If (z And 1) = 1 Then Debug.Print 1; ";";
    5. If (z And 2) = 2 Then Debug.Print 2; ";";
    6. If (z And 4) = 4 Then Debug.Print 4; ";";
    7. If (z And 8) = 8 Then Debug.Print 8; ";";
    8. If (z And 16) = 16 Then Debug.Print 16; ";";
    9. If (z And 32) = 32 Then Debug.Print 32; ";";
    10. If (z And 64) = 64 Then Debug.Print 64; ";";
    11. If (z And 128) = 128 Then Debug.Print 128; ";";
    12. If (z And 256) = 256 Then Debug.Print 256; ";";
    13. 'usw
    14. End Sub

    Visual Basic-Quellcode

    1. Sub test2()
    2. Dim z%, x%, i&, anz&, erg$
    3. z = 104
    4. anz = 11
    5. For i = 0 To anz - 1
    6. x = 2 ^ i
    7. If (z And x) = x Then erg = erg & Str$(x) & vbLf
    8. Next
    9. MsgBox erg
    10. End Sub