Ich habe eine Frage bezüglich des CountDiv Problems in Codility.
Das Problem ist: Schreibe eine Funktion:
%Vor%gibt bei drei ganzen Zahlen A, B und K die Anzahl der ganzen Zahlen im Bereich [A..B] an, die durch K teilbar sind, d. h .:
%Vor%Mein Code:
%Vor%Ich verstehe nicht, warum ich falsch liege, besonders bei diesem Testfall:
%Vor% wenn K =5
dann mit i=10
A<=i<=B
und i%k =0
also warum sollte ich 0 haben? Problemstellung .
Dies ist die O (1) -Lösung, die den Test
bestanden hat %Vor% Erläuterung: Anzahl der Ganzzahlen im Bereich [1 .. X]
, die durch% teilbar sind. co_de% ist K
. Also, im Bereich X/K
, ist das Ergebnis [A .. B]
Wenn A 0 ist, weil 0 durch irgendeine positive Zahl teilbar ist, müssen wir es zählen.
Nun, es ist ein völlig unleserlicher Oneliner, aber ich habe es gepostet, nur weil ich kann; -)
vervollständige den Java-Code hier:
%Vor%Der Weg, dieses Problem zu lösen, ist Prefix Sums, da dies Teil dieses Abschnitts in Codility ist.
Mit dieser Technik kann man die Anzahl der ganzen Zahlen zwischen 0 und A, die durch K (A / K + 1) teilbar sind, von der Anzahl der ganzen Zahlen zwischen 0 und B abziehen, die durch K teilbar sind (B / K + 1) ).
Denken Sie daran, dass A inklusive ist, wenn es also teilbar ist, dann schließen Sie das als Teil des Ergebnisses ein.
Unten ist meine Lösung:
%Vor%Das ist meine 100/100 Lösung:
%Vor%Wichtige Aspekte dieser Lösung:
Ich bin nicht sicher, was Sie in Ihrem Code zu tun versuchen, aber einfacher wäre es, den Modulo-Operator (%) zu verwenden.
%Vor%Eine weitere O (1) -Lösung, die im Test 100% erreicht hat.
%Vor%Dies besteht den Test .
Es ist ähnlich wie " wie viele Zahlen von 2 bis 5 ". Wir alle wissen, dass es (5 - 2 + 1)
ist. Der Grund für das Hinzufügen von 1
am Ende ist, dass die erste Zahl 2
zählt.
Nach A/K, B/K
wird dieses Problem dasselbe wie oben. Hier müssen wir entscheiden, ob A
in diesem Problem zählt. Nur wenn A%K == 0
zählt, müssen wir 1
zum Ergebnis b - a
hinzufügen (das gleiche gilt für b+1
).
Hier ist meine Lösung, zwei Zeilen Java-Code.
%Vor% Der Gedanke ist einfach.
a bezieht sich darauf, wie viele Zahlen in [1..A-1]
teilbar sind
B / K bezieht sich darauf, wie viele Zahlen in [1..B]
teilbar sind
0 ist durch irgendeine ganze Zahl teilbar. Wenn A 0 ist, sollten Sie eins zur Antwort hinzufügen.
Das ist meine 100/100 Lösung:
%Vor%0 ist durch eine ganze Zahl teilbar. Wenn A also 0 ist, sollten Sie eins zur Antwort hinzufügen.
Hier ist meine Lösung und bekam 100%
%Vor%