将数字均匀分布到由n个具有相等值的元素组成的数组中

  • 本文关键字:元素 数组 数字 分布 c++ c
  • 更新时间 :
  • 英文 :


我正试图将x划分为y部分,它们应该尽可能均匀地分布

例如:
如果是x = 5y = 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