2016-03-04 1 views
-2

Мой код приведен ниже. Это код C++. Этот код делает общее деление на два числа. Например, если входной сигнал равен 18,24, выход составляет 2,2,2,3,3. Но я хочу только 2 и 3 выхода. Я не могу это исправить. Как я могу это исправить? Спасибо за помощь ...Чтобы избежать повторения чисел в массивах в C++

#include<iostream> 
using namespace std; 
class Ratio { 
    public: 
     Ratio(int numerator, int denumerator) { 
      num=numerator; 
      den=denumerator; 
     } 

     void commondivisor() { 
      int arr[20]; 
      int arr2[20]; 
      int c=0; 
      int c2=0; 
      for (int q = 2; num != 1; q ++) 
      { 
       if (num % q == 0) 
       { 
        num /= q; 
        arr[c]=q; 
        q --; 
        c++; 
       } 
      } 
      cout << endl; 

      for (int w = 2; den != 1; w ++) 
      { 
       if (den % w == 0) 
       { 
        den /= w; 
        arr2[c2]=w; 
        w --; 
        c2++; 
       } 
      } 

      for (int i=0; i<c; i++) { 
       for (int j=0; j<c2; j++) { 
        if (arr[i]==arr2[j]) 
         cout<<arr2[j]; 
       } 
      } 
     } 


    private: 
     int num; 
     int den; 
}; 

int main() { 

    int a; 
    int b; 
    cin >> a; 
    cin >> b; 
    Ratio nesne(a,b); 
    nesne.commondivisor(); 
    return 0; 
} 
+0

Вы пытались найти его перед вставкой? http://en.cppreference.com/w/cpp/algorithm/find – willll

+0

да, но не – frkn6161

ответ

0

Ваш алгоритм поиска факторов на самом деле не работает? Например, для чисел 18 и 24 это должно быть {1,2,3,6,9,18} и {1,2,3,4,6,8,12,24}, соответственно, включая 1 и сам номер. Вы получаете {2,3,3} и {2,2,2,3}, соответственно.

std::vector<int> factors(int num) { 
    std::vector<int> fac_vec; 
    for (int i = 1; i <= num; i++) 
     if (num % i == 0) 
      fac_vec.push_back(i); 
    return fac_vec; 
} 

Это работает, считается, что это неэффективно. Чтобы найти общие элементы, вы можете выполнять итерацию с помощью вложенного цикла. Опять же, не очень эффективно, особенно потому, что векторы/массивы отсортированы. См. Пример ниже.

std::vector<int> find_common(std::vector<int>& l, std::vector<int>& r) { 
    std::vector<int> common_vec; 
    for (auto il : l) 
     for (auto ir : r) 
      if (il == ir) 
       common_vec.push_back(ir); 
    return common_vec; 
} 
Смежные вопросы