На входе число, количество частей на которое это число делится, номер части, кол. знаков после запятой
т.е. допустим нужно 7 разделить на 5 частей, кол знаков после запятой = 0
разбиение
1 1
1 2
1 или 1
2 2
2 1
порядок не существенен
те по номеру части например по 3 выдавал ее значение 1 (2)
Здравствуйте, stiks, Вы писали:
S>На входе число, количество частей на которое это число делится, номер части, кол. знаков после запятой
S>т.е. допустим нужно 7 разделить на 5 частей, кол знаков после запятой = 0
n = kd+r, или k=n/d, r=n%d
Нужно раскидать 0<=r<d единиц по d.
Если не стоит требование равномерности, то так: в первые r частей включаем единицы, а в остальные — не включаем.
unsigned part(unsigned n, unsigned d, unsigned i) // i - номер части, нумерация с нуля
{ return n/d + (i < n%d); }
А если нужно равномерно — это алгоритм Брезенхема для прямых.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, stiks, Вы писали:
S>На входе число, количество частей на которое это число делится, номер части, кол. знаков после запятой
S>т.е. допустим нужно 7 разделить на 5 частей, кол знаков после запятой = 0
S>разбиение
S>1 1
S>1 2
S>1 или 1
S>2 2
S>2 1
S>порядок не существенен
S>те по номеру части например по 3 выдавал ее значение 1 (2)
Может так:
void func (int number_in, int parts, int fract_in)
{
int fract = fract_in * 10;
int number = number_in * fract;
for (int n = 0; n < parts; n++)
{
int start = number * n / parts;
int end = number * (n + 1) / parts;
int range_int = (end - start) / fract;
int range_fract = (end - start) % fract;
// Output range_int.range_fract
}
}