Другие языки программирования и технологии

Помогите написать задачу на C++

Есть число n, его надо разделить на x частей при условии, что первая часть меньше второй в y раз,
а вторая меньше третьей в y раз и тд
Задача не на программирование, а на знание школьной математики. И ответ будет зависеть от того, как понимать "разделить на части".
Это может быть и n = a[0] + .+ a[x - 1], и n = a[0] * ...* a[x - 1]

Вариант для умножения:

n = a[0] * a[1] * ...* a[x-1] =
a[0] * (a[0] / y) * ...* (a[0] / (y ** (x - 1))) =
(a[0] ** x) / (y ** (x * (x - 1) / 2))

a[0] = (n * (y ** (x * (x - 1) / 2))) ** (1 / x)

double n, y;
int x;
cin >> n >> x >> y;
double q = pow(n * pow(y, x * (x - 1) / 2), 1.0 / x);
for (int i = 0; i < n; ++i) { cout << q / pow(y, i) << ' '; }

Вариант для сложения (банальная сумма геометрической прогрессии):

n = a[0] + a[1] + .+a[x-1] =
a[0] + (a[0] * (1 / y)) + .+(a[0] * ((1 / y) ** (x - 1))) =
a[0] * ((1 / y) ** x - 1) / ((1 / y) - 1)

a[0] = n / ((1 / y) ** x - 1) / ((1 / y) - 1)

double n, y;
int x;
cin >> n >> x >> y;
double q = n / (pow(1. 0 / y, x) - 1.0) / (1.0 / y - 1.0);
for (int i = 0; i < n; ++i) { cout << q / pow(y, i) << ' '; }
Асхат Байзулин
Асхат Байзулин
55 584
Лучший ответ
Maksim Maksimov Меня такому в школе не учили? Какой раздел математики открыть? =)
не помогаю ленивым халявщикам, через 5 лет когда ты пойдешь работать тоже будешь перекладывать обязанности?
Maksim Maksimov Такой алгоритм будет работать с заданной точностью только, т. к. вероятно числа часто будут иррациональными.
Олег Китаев-Берлин Почему сразу вывод что я студент? Я для откладывания болезни паркинсона пишу программу, но залип с такой задачей.