2016-11-05 4 views

Antwort

-1
int lcm(int a,int b){ 

    static int temp = 1; 

    if(temp % b == 0 && temp % a == 0) 
     return temp; 
    temp++; 
    lcm(a,b); 

    return temp; 
} 
+0

Wie würde ich das dann konvertieren, so dass es ein Array von Ints akzeptieren wird, wo ein ist? – user3832668

0

Sie haben dies als C++ markiert. Hier ist ein möglicher C++ - Weg, wie man das macht, mit std :: vector.

class T435_t 
    { 
    private: 
     std::vector<int> iVec; 

     void show(std::string label) 
     { 
      std::cout << label << std::endl; 
      for (auto iv : iVec) 
       std::cout << " iVec " << std::setw(6) << iv << std::endl; 
      std::cout << std::endl; 
     } 

    public: 

     T435_t() // : std::vector<int> iVec - default ctor ok 
     { 
     } 

     ~T435_t() { } 

     int exec() 
     { 
      // test data 
      iVec.push_back(5); 
      iVec.push_back(10); 
      iVec.push_back(15); 
      iVec.push_back(20); 
      iVec.push_back(25); 

      show("\n ---- ---"); 

      int retVal = LCM(1); // start tmp at 1 

      std::cout << " LCM " << std::setw(6) << retVal << std::endl; 

      return(0); 
     } 

    private: 

     inline bool componentOf (int tmp) 
     { 
      size_t count = 0; 
      for (auto iv : iVec) 
      { 
       if (0 == (tmp % iv)) 
        ++count; // how many elements of vec are component 
      } 
      return (count == iVec.size()); // when all are 
     } 

     // recursion 
     int LCM(int tmp) 
     { 
      if (componentOf(tmp)) // recursion termination clause 
       return (tmp); 

      return (LCM (++tmp)); // probably tail recursion with -O3 
     } 
    }; 


int main(int argc, char* argv[]) 
{ 
    std::cout << "argc: " << argc << std::endl; 
    for (int i=0; i<argc; i+=1) std::cout << argv[i] << " "; 
    std::cout << std::endl; 

    setlocale(LC_ALL, ""); 
    std::ios::sync_with_stdio(false); 

    T435_t t435; // C++ uses classes! 
    int retVal = t435.exec(); 

    std::cout << "\nFINI " << std::endl; 
    return(retVal); 
} 

Ausgang:

---- --- 
iVec  5 
iVec  10 
iVec  15 
iVec  20 
iVec  25 

LCM  300 

Ausgang mit 5 und 6 codiert in Ivec

---- --- 
iVec  5 
iVec  6 

LCM  30 
+0

Beachten Sie, wie die Verwendung von Vektor den Code vereinfacht ... Zählen und Index einfügen alles für Sie erledigt. –

+0

Beachten Sie, wie die Verwendung von Vektor und "for (auto iv: iVec)" das Scannen der Inhalte von iVec sowohl für "show()" als auch für die Methode "componentOf()" vereinfacht. –

+0

Beachten Sie, wie der rekursive Code "LCM()" vollen Zugriff auf ein beliebiges Datenattribut der Klasse hat ... zum Beispiel musste ich das 'array' ptr und die Länge durch die Rekursion nicht übergeben, LCM() hat einfach auf Instanzen iVec. Ich musste auch nicht 'tmp' durch die Rekursion gehen, aber ich dachte, es sah besser aus. –