我正试图将x
划分为y
部分,它们应该尽可能均匀地分布
例如:
如果是x = 5
和y = 3
,我想要arr = [1, 2, 2]
。
我提出的解决方案基本上是打印[1,1,3],这并不是尽可能均匀地分布。
int *arr= (int *)malloc(y* sizeof(int));
for (int i = 0; i < y; i++)
{
arr[i] = x / y;
if (i == nrThreads - 1)
{
arr[i] = x / y+ x % y;
}
printf("%d ",arr[i]);
}
数组项的顺序无关紧要。它可以是以下三种之一:[1, 2, 2], [2, 1, 2], [2, 2, 1]
我简化为只打印您想要的数字
首先打印x/y+1,只要您有余数(即模(,然后只打印所需数字的剩余部分x/y。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x = 5;
int y = 3;
int i=0;
for (; i < x%y; i++)
{
printf("%d ", x/y+1);
}
for (; i < y; i++)
{
printf("%d ", x/y);
}
printf("n");
return 0;
}
输出:
2 2 1