Wie erstelle ich in Mathematica eine Liste von Zahlen, deren Quersumme größergleich 5 ist?
Guten Abend zusammen,
ich würde gerne in Mathematica eine Liste von Zahlen bis 100 erstellen, deren Quersumme größergleich 5 ist.
Sprich 1-4 fliegt raus, 5-9 bleibt drin, 10-13 ist raus usw.
Nun habe ich nach reichlicher Überlegung das Folgende gebastelt:
Select[
Total[ (*Addiert die Ziffern auf*)
IntegerDigits[ (*trennt die Zahlen in Ziffern auf*)
Range[100]], (*erzeugt die Zahlen bis 100*)
{2}],
GreaterThan[4]] (*Auswahlbedingung >=5*)
Damit wird nun eine Liste der Quersummen ausgegeben, die 5 oder größer sind. Damit bin ich aber noch nicht am Ziel.
- Frage: Beim Aufaddieren der Ziffern wird keine andere Zahl als 2 zugelassen, die Hilfe gibt dazu nur ein Beispiel an. Ist es korrekt, dass diese für das Lesen zeilenweise nötig ist?
- Frage: Wie setze ich diesen Vektor nun ein, um ihn als Bedingung zum Anzeigen der Zahl zu verwenden?
In anderer Sprache würde ich den Zahlenvektor mit einem Vektor aller Quersummen hochzählen und letzteren ständig auf die Größe prüfen. Ist diese zu klein, würde ich die entsprechende Zahl aus dem Zahlenvektor streichen.
Bei Mathematica muss ich in diesem Fall wohl ein "Nothing" enschieben, so viel habe ich herausgefunden. Nur wie ich einen solchen Vergleich implementiere, habe ich noch nicht begriffen.
Danke für eure Hilfe im Voraus!
Kannst du den Term bitte als Quelltext formatieren, damit man die Einrückungen erkennen kann?
Ist erledigt, wartet auf Bestätigung. Allerdings ist Einrücken bei Mathematica ja auch so n Ding
2 Antworten
Ich hab mir die Frage nicht ganz durchgelesen und ich hab keine Mathematica Kenntnisse
Aber beim Programmieren kannst du das durch 2 simple Schleifen machen
Eine die von 1 - 100 hoch zählt
und darin eine die deine derzeitige Zahl immer modulo 10 berechnet und die einzelnen Ziffern addiert.
Und wenn es größer gleich 5 ist am Ende dann wird es ausgegeben.
Das ist ne Sache von 5 Zeilen
Hallo, danke für die Antwort. Das ist mit klar, in C oder VBA wäre das auch kein Problem für mich, nur Mathematica hat da seine Eigenarten, die ich nach zwei Tagen autodidaktischem Lernens noch nicht ganz nachvollziehen kann
Funktionelles Programmieren ist in Mathematica zwar möglich, aber unüblich. Die Sprache scheint mir ein Lisp-Abkömmling mit alternativer Syntax zu sein; am ehesten wäre eine Lösung in Lisp übertragbar.
- Was sagt die Beschreibung zu Total zum 2. Argument? Kannst du das ", {2}" ggf. komplett weglassen?
- Wäre da nicht sinnvoller
Select[
Range[100],
((Plus @@ IntegerDigits[#]) >= 4)&
]
oder ähnlich (ich weiß nicht mehr, wie man den Head eines Ausdrucks ersetzt)
Hey, ne, die zwei ist notwendig, damit Total eine Reihe, in diesem Fall den Vektor ausliest. Ansonsten würde es spaltenweise vorgehen, für den Fall, dass man eine Matrix einlesen möchte und würde die einzelnen Summen der Spalten ausgeben.
Dein Code gibts den folgenden Vektor aus:
{4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, \
27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, \
45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, \
62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, \
79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, \
96, 97, 98, 99}
Scheinbar wird hier nur das größergleich 4 einbezogen. Weshalb die 100 verschwindet, ist mir nicht ganz klar.
Hier die Lösung:
With[{ints = Range[100]},
Pick[ints, Clip[Total[IntegerDigits[ints], {2}], {0, 5}], 5]]