求平均分配算法

假设有按升序排列好的100个数,如何实现将其分为5份(每份中数字的个数不用相等),并使得每份中所有数之和大致相等?例如:这100个数之和为1000,则要使每份数字的和与(... 假设有按升序排列好的100个数,如何实现将其分为5份(每份中数字的个数不用相等),并使得每份中所有数之和大致相等?例如:这100个数之和为1000,则要使每份数字的和与(1000/5)相差不超过5%。
另外,每份中最好是大数和小数都要有,即大小搭配~
展开
 我来答
城市气息
推荐于2016-08-26 · TA获得超过192个赞
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:0
展开全部
/* 是不是这样?最大的5个数分别放在5份之中,然后从后向前扫描,看这5份谁的总和最少,最少的就把当前数分给它,直到结束,本人认为这是最平均的 */

#include <stdio.h>
#include <string.h>

int array_sum(int *array, int length)
{
int i, sum = 0;
for (i=0; i<length; i++)
{
sum += array[i];
}
return sum;
}

void input_array(int *array, int *i, int value)
{
array[(*i)] = value;
(*i)++;
}

int main(void)
{
int i, j, k, t, a[100];
int group[5][100];
int g[5];
for (i=0; i<100; i++) /* 可以自己输入数据 */
{
a[i] = i;
}
memset(group, 0, sizeof(group));
memset(g, 0, sizeof(g));

for (i=99; i>=0; i--)
{
k = 0; /* 先假定为第0号组 */
t = array_sum(group[0], 100);
for (j=1; j<5; j++)
{
if (t > array_sum(group[j], 100))
{
t = array_sum(group[j], 100); /* 找出最小的 */
k = j; /* 记住是哪一组 */
}
}
input_array(group[k], &g[k], a[i]);
}

for (i=0; i<5; i++)
{
printf("group %d total: %d\n", i+1, array_sum(group[i], 100));
}

return 0;
}

输出:
group 1 total: 990
group 2 total: 990
group 3 total: 990
group 4 total: 990
group 5 total: 990
趋动科技
2023-07-11 广告
要提高算法工程师的工作效率,可以采取以下措施:1. 定期进行代码审查,识别代码中的不足之处,并采取改进措施。这可以帮助算法工程师发现和修复潜在的问题,提高代码质量和效率。2. 实施有效的时间管理。算法工程师需要学会合理安排时间,制定明确的工... 点击进入详情页
本回答由趋动科技提供
zzk88
2008-01-27 · TA获得超过374个赞
知道小有建树答主
回答量:240
采纳率:0%
帮助的人:364万
展开全部
这一百个数放在一个数组中且已经排好序,先计算出这一百个数的和,然后根据你分的份数计算出每份需所有数的大致和应为多少,然后就用一个循环,从第一个元素往后面加,当加到超过上面计算的每份和时就得到分得的一份,后面依次这样,就得到分得的每份!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luo0426
2008-01-27 · TA获得超过3351个赞
知道小有建树答主
回答量:1016
采纳率:0%
帮助的人:353万
展开全部
lu guo o
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
窗点
2008-01-27
知道答主
回答量:52
采纳率:0%
帮助的人:0
展开全部
分解质因数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式