29 void distribute(
int number,
int groups,
int *ratios,
int *result)
31 int i, sum = 0, max_count, max;
32 std::vector<int> rest, max_groups;
34 max_groups.resize(groups);
36 const int original_number = number;
53 for (i = 0; i < groups; i++) {
59 for (i = 0; i < groups; i++) {
60 result[i] = number * ratios[i] / sum;
64 for (i = 0; i < groups; i++) {
65 rest[i] = number * ratios[i] - result[i] * sum;
69 for (i = 0; i < groups; i++) {
77 for (i = 0; i < groups; i++) {
82 }
else if (rest[i] == max) {
83 max_groups[max_count] = i;
90 result[max_groups[0]]++;
91 rest[max_groups[0]] = 0;
94 int min = result[max_groups[0]], which_min = max_groups[0];
99 for (i = 1; i < max_count; i++) {
100 if (result[max_groups[i]] < min) {
101 min = result[max_groups[i]];
102 which_min = max_groups[i];
112 number = original_number;
113 for (i = 0; i < groups; i++) {
void distribute(int number, int groups, int *ratios, int *result)
Distribute "number" elements into "groups" groups with ratios given by the elements in "ratios".
#define fc_assert(condition)