Wie um herauszufinden, welcher Wert am nächsten liegt, um eine Zahl in C?
Ich habe den folgenden code in C:
#define CONST 1200
int a = 900;
int b = 1050;
int c = 1400;
if (A_CLOSEST_TO_CONST) {
//do something
}
Was ist ein bequemer Weg, um zu überprüfen, ob, wenn ein, ist der nächste Wert CONST unter a,b und c ?
Edit:
Ist es egal, ob ich 3 Variablen oder ein array wie dieses (es könnte mehr als 3 Elemente):
int values[3] = {900, 1050, 1400};
es ist eine Suche übung. In der Regel min (abs(val-CONST))
Es ist mehr ein mathematisches problem als ein C-coding-Problem. Versuchen Sie zu minimieren, ist der absolute Wert der Differenz zwischen dem CONST und Ihre Telefonnummer ein.
Ich möchte nicht den nächsten Wert, ich möchte wissen, ob Sie einen bestimmten gewählten variable (sagen wir, ein) ist die nächste
In der zweiten Zeile vergleichen Sie Ihr ein Ergebnis Ihrer Suche (für bessere Ergebnisse Zwischenspeichern Ergebnis Ihrer Suche)
Es ist mehr ein mathematisches problem als ein C-coding-Problem. Versuchen Sie zu minimieren, ist der absolute Wert der Differenz zwischen dem CONST und Ihre Telefonnummer ein.
Ich möchte nicht den nächsten Wert, ich möchte wissen, ob Sie einen bestimmten gewählten variable (sagen wir, ein) ist die nächste
In der zweiten Zeile vergleichen Sie Ihr ein Ergebnis Ihrer Suche (für bessere Ergebnisse Zwischenspeichern Ergebnis Ihrer Suche)
InformationsquelleAutor Benjamin Crouzier | 2011-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Werke für drei Variablen:
Dieser arbeitet mit einem array von einem oder mehr Elementen, wobei n die Anzahl der Elemente:
Sehe es online: ideone
Es würde eine ganze Menge schöner, wenn Sie verwendet ein array von n Elementen anstelle von n Variablen.
Wenn Sie möchten, verwenden Sie diesen linearen Ansatz, fügen Sie die Konstanten in ein array und Schleife durch, vergleicht jedes element.
Bearbeitet meine Frage, ich wäre froh, wenn Sie eine generische Lösung mit einem array
Ein Weg, um diese Funktion allgemeineren wäre, um einen Dritten parameter repräsentieren die position der integer-wir sind neugierig. Wenn Sie wollten, dass die Logik in is_first_closest() die gleiche ist, tauschen Sie einfach nur den ersten Wert mit dem Wert der gewünschten position am Anfang dann wieder vor der Rückkehr.
InformationsquelleAutor Mark Byers
Vergleichen Sie den absoluten Wert von (a-CONST), (b-CONST) und (c CONST). Je nachdem, welcher absolute Wert am niedrigsten ist, dass man am nächsten ist.
InformationsquelleAutor Jonathan M
Hier ist eine generalisierte Methode. Die
min_element()
- Funktion nimmt ein int-array, array-Größe, und die Zeiger auf eine Vergleichsfunktion. Der Vergleich Prädikat gibt wahr, wenn der erste Werte ist weniger als der zweite Wert. Eine Funktion, die geradea < b
finden würde, das kleinste element im array. Diepinouchon()
Vergleich-Prädikat führt Ihre Nähe Vergleich.InformationsquelleAutor Blastfurnace
I m hinzufügen von etwas in Mark Byres code.....
Durch diese Funktion wird ein array von Integer-zahlen und Rückgabe der Anzahl, die am nächsten an der CONST.
InformationsquelleAutor Ravi Kumar
Müssen Sie vergleichen Ihre Konstante zu jedem element. (eignet sich gut für 3 Elemente, aber es ist eine sehr schlechte Lösung für größere elementcount, in dem Fall schlage ich vor, eine Art von Teile und herrsche-Methode). Nach dem Sie es vergleichen, Ihre Unterschiede, der niedrigste Unterschied ist der, das const am nächsten ist)
InformationsquelleAutor ScarletAmaranth
Ist diese Antwort eine Reaktion auf deinen edit von der ursprünglichen Frage und deinen Kommentar.
(Beachten Sie, dass, um zu bestimmen, das Ende des array können wir die verschiedenen Ansätze, die ich verwenden in diesem speziellen Szenario ist die einfachste.)
InformationsquelleAutor ScarletAmaranth
Für eine große sortierte Menge, die Sie sollten in der Lage sein, eine binäre Suche zu finden, die zwei zahlen, die (modulo Rand Fälle) Grenze der Zahl, einer von denen hat am nächsten.
So dass Sie erreichen können, ist O(Log n) Leistung anstelle von O(n).
InformationsquelleAutor Cade Roux
pseudocode:
InformationsquelleAutor user732933