这样的平均值怎么求

nickgg 2015-10-16 05:01:43
要将M进行N等分,分不尽的均匀加到序列上。
比如:
12, 4 =〉3 3 3 3
8, 3 => 3 2 3 2 3 3也可以
14, 4 =〉 3 4 3 4 3 3 4 4是不可以的
有什么好的方法
...全文
183 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fefe82 2015-10-16
  • 打赏
  • 举报
回复

int M;
int N;
// read M, N and check for validity

int q = M/N;
int r = M%N;
std::vector<int> res;
if (r <= N/2)
{
  res.assign(q, N);
  if (r != 0) 
  {
    for (int i = 0; i < r; i++)
    {
      res[i * (N/r)] ++;
    }
  }
}
else
{
  res.assign(q+1, N);
  r = N - r;
    for (int i = 0; i < r; i++)
    {
      res[i * (N/r)] --;
    }
}
没跑过
mewiteor 2015-10-16
  • 打赏
  • 举报
回复

void split(unsigned int m,unsigned int n,unsigned int* out_array/*此数组用于输出*/)
{
	*out_array=m/n;
	if(n>1)
		split(m-*out_array,n-1,out_array+1);
}
lm_whales 2015-10-16
  • 打赏
  • 举报
回复
改正一下
引用 6 楼 lm_whales 的回复:
这个 一个方案是: 首先求出平均值 average = sum /n; 每个数都填充为 average; 然后求出余数 remain 定义一个整数,量初始化为 0,每次加 remain 对n 求余数 并把商加到 a[i] 上,共计算n次
不考虑精度的话,可以用浮点数,先得到平均值 average 循环n次每次加上average 取整 就是a[i]
lm_whales 2015-10-16
  • 打赏
  • 举报
回复
这个 一个方案是: 首先求出平均值 average = sum /n; 每个数都填充为 average; 然后求出余数 remain 定义一个整数,量初始化为 0,每次加 remain 对n 求余数 并把商加到 a[i] 上,共计算remain次
baidu_31332551 2015-10-16
  • 打赏
  • 举报
回复
for( i = 0;i<N;i++) { a[i] = M/N; } for( j = 0;j<M%N;j++) { a[i] = a[i]+1; i--; }
gh_99 2015-10-16
  • 打赏
  • 举报
回复
M/N为N组每个数的临时值, 剩下M-(M/N)*N小于N(即将这些数都分到N个临时值也不够)。 N奇数,M-(M/N)*N为偶数时,从N和N/2同时开始加 1 , 然后同时向减小的方向移,加 1 ,循环上步直到余数为零。 N奇数,M-(M/N)*N为奇数时,中间那个数加 1 ,从N和(N-1)/2同时开始加 1 , 然后同时向减小的方向移,加 1 ,循环上步直到余数为零。 N为偶数, 参考上面N奇数的情况。
paschen 2015-10-16
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
没懂你有有什么问题 要将M进行N等分,先让每个元素等于M / N,最后看所有分出来的元素加起来是多少,把剩余的分配在其上
如把14进行4等分,用14 / 4等于3,然后每个元素都分3,然后加起来12,还差2,随便选2个元素,加上1
paschen 2015-10-16
  • 打赏
  • 举报
回复
没懂你有有什么问题 要将M进行N等分,先让每个元素等于M / N,最后看所有分出来的元素加起来是多少,把剩余的分配在其上
fly_dragon_fly 2015-10-16
  • 打赏
  • 举报
回复
按你的例子, 直接算, N奇数, 中间取M/N, 剩下M-M/N, N为偶数, 直接分成两堆, 不能平分左或右多1 重复以上过程

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧