Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Сборная Домашка
+2

Помогите с++ срочно!

Сокращение последовательности
Дана последовательность натуральных чисел. Найдите наибольший общий делитель всех элементов последовательности и сократите все её члены на него.

Решение оформите в виде функции bool isDivisor(vector<int> &A, int d), проверяющей, является ли число d
общим делителем последовательности, и функции void reduction(vector<int> &A), которая находит наибольший общий делитель и сокращает все члены последовательности на него.

Входные данные

В первой строке входных данных записано натуральное число n
(n⩽100
) — количество элементов последовательности. В следующей строке даны n
натуральных чисел, не превышающих 10000
, — элементы последовательности.

Выходные данные

Выведите n
чисел — итоговую последовательность.

Примеры
Ввод
Вывод
5
3 6 9 12 18
1 2 3 4 6
2
57 179
57 179 пререпробовал всё Вот код #include <iostream>
#include <vector>
using namespace std;
bool isDivisor(vector<int> &A, int d)

int main()
{
int n;
cin >> n;
vector<int> A(n);
for (int i = 0; i < n; ++i){
cin >> A[i];
}
reduction(A);
for (int i = 0; i < A.size(); ++i){
cout << A[i] << " ";
}
return 0;
}

По дате
По рейтингу
Аватар пользователя
Просветленный
4мес

Вот решение задачи с функциями isDivisor и reduction. Добавим НОД через алгоритм Евклида.

#include <iostream>
#include <vector>
using namespace std;

bool isDivisor(vector<int> &A, int d) {
for (int i = 0; i < A.size(); i++) {
if (A[i] % d != 0) return false;
}
return true;
}

int gcd(int a, int b) {
while (b) {
a %= b;
swap(a, b);
}
return a;
}

void reduction(vector<int> &A) {
int g = A[0];
for (int i = 1; i < A.size(); i++) {
g = gcd(g, A[i]);
}
if (g > 1) {
for (int i = 0; i < A.size(); i++) {
A[i] /= g;
}
}
}

int main() {
int n;
cin >> n;
vector<int> A(n);
for (int i = 0; i < n; ++i) {
cin >> A[i];
}
reduction(A);
for (int i = 0; i < A.size(); ++i) {
cout << A[i] << " ";
}
return 0;
}

Проверка: для 3, 6, 9, 12, 18 НОД = 3, делим на 3, получаем 1, 2, 3, 4, 6. Для 57, 179 НОД = 1, не делится, остаётся 57, 179. Всё верно.