Упростить отношения внутри контейнера - PullRequest
0 голосов
/ 22 апреля 2019

Предположим, вы получили контейнер отношений и хотите упростить отношения до самых низких целых чисел.

Ввод:

std::vector<int> v1 = { 10, 20 , 30, 40 };

Вывод:

1,2,3,4

Как решить эту проблему для контейнера n-размера?Я ищу общее решение, которое работает для любого количества элементов и любых целочисленных значений.

1 Ответ

7 голосов
/ 22 апреля 2019

Повторно применяйте std::gcd ко всем числам в векторе, чтобы найти gcd всех чисел, а затем делите каждый элемент на gcd.

const int gcd = std::reduce(v1.cbegin(), v1.cend(), 1, [](int a, int b) {
  return std::gcd(a, b);
});
if (gcd != 1) {
  for (int &elem : v1) {
    elem /= gcd;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...