2016-08-17 1 views
0

Es gibt hundert Türen, die alle geschlossen sind. Ein Roboter macht 100 Durchgänge, so dass er bei jedem Durchgang um den nächsten Startpunkt erhöht wird. SomitIncremental Door Pass Riddle - Nur Viereckpositionen offen

1, 2, 3,..... 
2, 4, 6, 8,.... 
3, 6, 9, 11,.... 
4, 8, 12, 16,.... 
....... 
100 

jedes Mal, wenn eine Tür besucht er von seinem aktuellen Zustand schaltet, so schließt, wenn es geöffnet ist, und öffnet, wenn er geschlossen war. Nach 100 Durchgängen finden Sie die Anzahl der Türen, die geöffnet sind.

Das Problem ist trivial, hier ist meine Lösung,

def door_traversal(): 
    arr = [] 
    arr = [0 for i in range(101)] 
    for i in range(1, 101, 1): 
     for j in range(i, 101, i): 
      arr[j] = not arr[j] 

    count = 0 
    for i in range(1, 101, 1): 
     if arr[i] == 1: 
      count += 1 
    return count 

Die Antwort ist 10 und auf die Überprüfung wie bekomme ich diese Nummer 10, es scheint, alle Türindizes, die perfekt quadratisch sind open.Thus die offene Türen sind

Was ich habe versucht zu verstehen, ist die Mathematik dahinter, das. Irgendwelche Hilfe dabei?

+2

Ich sehe nicht, wie das Programmieren ist. Ja, Sie haben dort Code, aber die eigentliche Frage ist rein mathematisch. – SiHa

Antwort

3

Faktorisieren Sie die Zahlen - jeder Faktor gibt den "Durchgang" an, durch den die Tür offen/geschlossen ist. Quadratische Zahlen haben eine ungerade Anzahl von Faktoren (9 = 1,3 [zweimal], 9). Alles andere hat eine gerade Anzahl von Faktoren

+0

In der Tat macht es Sinn, so dass jeder Faktor darstellt, welcher Sweep diese spezielle Tür abdeckte. –