Frage von Programm11807, 42

Funktion in C++ schreiben an welche man bestimmt Parameter übergibt und man bestimmt Zahlen aus einem Zahlenraum zurück erhält?

Also sag ich mal man kann 4 Werte übergeben Start- und Endwert sowie die beiden Wert durch welche die Zahlen zwischen Start und Endwert teilbar sein sollen

Als Beispiel: Übergebe Wert 1 als Startwert und Wert 60 als Endwert und die Werte 6 und 9 nun soll mir das Programm bzw. die Funktion in dem Programm die Zahl 54 weil das die Zahl ist die durch 6 und 9 als einzige teilbar ist in dem Zahlen Raum bis 60 und den Wert 1 weil es nur eine Zahl gibt auf die so etwas zutrifft.

Gibt es vlt. eine allgemeine Lösung für das Problem, denn solche Sachen treten ja sicher häufiger auf das man für einen bestimmten Zahlenraum nur die Zahlen rausfischen möchte welch auf bestimmte Parameter zutreffen.

Kann mir jemand so eine Funktion in C++ schreiben oder erklären wie man so ein Problem am einfachsten und effizientesten löst?!

Antwort
von BrutalNormal, 42

1) es gibt mehr Zahlen, 18,36,54 bspw:


Ich bin zwar nicht fit was C++ angeht, aber so in etwa sollte das gehen schematisch, musst halt in C++ umschreiben.

public List<int> getMyNumber(int bottomLimit, int upperLimit, int firstNumber, int secondNumber)

{

List<int> resultList;

for(int i = bottomLimit; i<= upperLimit; i++)

{ if(i%firstNumber == 0 and i%secondNumber==0)

resultList.add(i);

}

return resultList;

}


Du hast quasi eine Ergebnisliste, und zählst i von der unteren Grenze bis Obergrenze.

Wenn i durch beide Zahlen ohne Rest teilbar ist, ist es eine gesuchte Zahl

Kommentar von Programm11807 ,

Ja okay das ist echt nicht schlecht

Einziges Problem wollte das eigentlich für eine Aufgabe nutzen bei der es 10 Zahlen gibt nun da ist das ziemlich viel was ich dort in die If-Verzweigung schreiben muss dachte mir das man das alt. etwas kürzer hinbekommt?!

Kommentar von BrutalNormal ,

generisch machst du es so, du übergibst eine Liste oder eine andere Datenstruktur mit den Zahlen.

Vom Algorithmus her ist es das selbe. Wenn i durch alle übergebenen Zahlen restlos teilbar ist, dann ist es eine der gesuchten Zahlen.

Kommentar von J0T4T4 ,

Hier mal die C++ Variante:

#include <vector>


std::vector<int> getMyNumber(int bottomLimit, int upperLimit, std::vector<int> numbers)

{

 std::vector<int> resultList;

 for(int i = bottomLimit; i<= upperLimit; i++)

 {

  for (int count = 0; count < numbers.size(); count++) 

  {

   if(i%numbers.at(count) == 0)

    resultList.push_back(i);

  } else {

   continue;

  }

 }

 return resultList;

}

Hab es nicht getestet, aber wird schon laufen ;) Und sorry für das Format...

PS: War das C# oder Java?


Kommentar von J0T4T4 ,

Du musst das resultList.push_back(i) hinter die innere for-Schleife schreiben, sonst hast du die Zahl ein wenig zu oft in der Liste. Wird wohl an der Uhrzeit liegen...

Und das mir dem continue ist auch ungünstig. Aber du weißt jetzt sicher, wie es gehen könnte

Antwort
von Mikkey, 20

Als Ergänzung zur bisherigen Antwort:

Es empfiehlt sich, die Anforderung aufzuteilen, es ist kein guter Stil, alles in eine Funktion, zudem noch mit (eigentlich) nicht C++-konformen Typen zu packen.

1. erstelle eine Methode Kgv, die das kleinste gemeinsame Vielfache aus mehreren Zahlen (übergeben in einem Array) berechnet.

Im eigentlichen Ablauf brauchst Du dann nur noch die Vielfachen des kgv auszugeben, die sich innerhalb des vorgegebenen Bereichs befinden:

for (int ii = kgv; ii <= obereGrenze; ii+=kgv)

{ if (ii >= untereGrenze)

AppendToErgebnisliste(ii);

}

Kommentar von Programm11807 ,

1. Eine Array ist schon ein bisschen primitiv, findest du nicht?! Und 2. das ist ja das wieso ich das Programm schreiben wollte und es auf einer Art Brute-Force-Methode basiert weil ich ein programm programmieren wollte was die die (k)gVs mehrer also wie oben gesagt z.B. von zehn Zahlen heraus zu bekommen. Deswegen sollte die Funktion ja auch so flexible und verallgemeinert sein wie möglich.

Kommentar von mememememe ,

Du kannst doch für die Funktion KgV so anpassen, dass das kgV von beliebig vielen Zahlen bestimmt wird!

Keine passende Antwort gefunden?

Fragen Sie die Community