Duplikate finden in der Reihe, wenn es einer ist, und zeigen Sie es C++
mein Programm nimmt Werte aus einer Eingabe-Datei und übergibt diese an einen array namens gpa. Habe ich eine Funktion, die findet den kleinsten Wert in der Lücke array und zeigt es, aber ich brauche auch die Anzeige eines doppelten Wert, wenn es einen gibt. Wie kann ich dies tun.
Danke im Voraus
#include <iostream>
#include <fstream>
using namespace std;
void lowestGpa(string names[], double gpa[], int SIZE){
int count;
double lowest = gpa[0];
string name;
for (count = 0; count < SIZE; count++)
{
if (gpa[count] <= lowest)
{
lowest = gpa[count];
name = names[count];
}
}
cout << name << " " << lowest;
}
int main()
{
ifstream infile;
infile.open("GPA.txt");
int const SIZE = 15;
string names[SIZE];
double gpa[SIZE];
while (infile)
{
for(int i = 0; i < SIZE; i++)
{
infile >> names[i] >> gpa[i];
}
}
lowestGpa(names, gpa, SIZE);
infile.close();
return 0;
}
- überprüfen Sie
std::set
- In einem nicht verwandten note, bitte lassen Sie die Gewohnheit des double-spacing code. Es macht Sie unlesbar. Verwenden Sie Leerzeichen strategisch.
- Es gibt eine
std::min_element
Algorithmus und einestd::adjacent_find
Algorithmus, der Ihnen genau sagt, wo benachbarte gleiche Elemente sind. - fügen Sie einfach eine weitere Schleife nach finden Sie den niedrigsten Wert zu überprüfen, welche einen entspricht es...
- Möchten Sie vielleicht zu prüfen, auf dass man.
- Es wird nicht immer zu true ausgewertet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aber diese Methode ist nicht perfekt, 2 Schleifen.
Die einfachste (aber nicht unbedingt computationaly Schnellste) Weg sein könnte, um zu Sortieren Sie Ihre Daten. Sie können dann finden Sie den niedrigsten, denn es wird an position 0 im array, und Sie können überprüfen, indem Sie Duplikate durch Durchlaufen der Liste und die Suche nach Instanzen, wo Partitur[n] == Ergebnis[n + 1].
Live-demo: http://ideone.com/3WKrHR
O(nlog n)
, in der Erwägung, dassO(n)
möglich ist. Aber ich bezweifle, dass macht einen großen Unterschied hier.Gibt es keine Notwendigkeit zu Sortieren, die das gesamte array noch die Schleife zweimal. Verwenden Sie einfach einen zusätzlichen Vektor zum speichern der Namen mit niedrigsten GPA.
Werden Sie wahrscheinlich wollen, finden alle Duplikate der niedrigsten GPA.
Dieser läuft in
O(n)
,Auch, das nicht abstürzt, wenn
size
ist0
.1. / 0
? Interessant. ... Na, das sieht wie eine Division durch null? 🙂1 / 0
. Es ist1. / 0
.Können Sie
std::set
,std::set_difference
,std::sort
zu finden, die niedrigsten doppeltes element:Aus der Beispiel-Daten gepostet, dieser Ausgänge:
Als die doppelte Elemente
Und
1
als die niedrigste doppelte element.REFERENZEN:
http://www.cplusplus.com/reference/algorithm/set_difference/