Dienstag, 5. März 2013

Counting Ones

Das Problem Nr. 9 „Counting Ones“ wird bereis als Spaßproblem („This program is a fun math problem!“) beschrieben. Es sind in einem Zahlenbereich von 1 bis einschließlich einer Zahl n alle Einser gezählt werden. Im Bereich bis 10 finden sich so z. B. zwei Einser und zwar bei 1 und einmal bei 10. Die Lösung des Problems, wenn man die Dateneingabe außen vor lässt, ist knapp zu formulieren:
def counting_ones(n):
    """ Soll alle Einser zwischen
    1 bis einschließlich n ermitteln

    """
    zahlen = [str(n) for n in range(1,n + 1)]
    zahlenreihe = "".join(zahlen)
    return zahlenreihe.count("1")


for i in [13,1,999,23,1111,9997,511]:
    print(counting_ones(i))
Schöne, einfache Probleme, zumindest die, die ich mir jetzt angesehen habe.

1 Kommentar:

  1. Wenn die das als *Mathe*-Problem bezeichnen, dann müsste es mathematischen Weg geben, also einen der es nicht nötig macht, dass man alle Zahlen tatsächlich aufzählt und in Zeichenketten umwandeln, sondern irgend eine Formel mit der man das ausrechnen kann, oder zumindest etwas kurzes was nicht so viel Speicher verbraucht.

    AntwortenLöschen