求平均分配算法
假设有按升序排列好的100个数,如何实现将其分为5份(每份中数字的个数不用相等),并使得每份中所有数之和大致相等?例如:这100个数之和为1000,则要使每份数字的和与(...
假设有按升序排列好的100个数,如何实现将其分为5份(每份中数字的个数不用相等),并使得每份中所有数之和大致相等?例如:这100个数之和为1000,则要使每份数字的和与(1000/5)相差不超过5%。
另外,每份中最好是大数和小数都要有,即大小搭配~ 展开
另外,每份中最好是大数和小数都要有,即大小搭配~ 展开
4个回答
展开全部
/* 是不是这样?最大的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
#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 广告
2023-07-11 广告
要提高算法工程师的工作效率,可以采取以下措施:1. 定期进行代码审查,识别代码中的不足之处,并采取改进措施。这可以帮助算法工程师发现和修复潜在的问题,提高代码质量和效率。2. 实施有效的时间管理。算法工程师需要学会合理安排时间,制定明确的工...
点击进入详情页
本回答由趋动科技提供
展开全部
这一百个数放在一个数组中且已经排好序,先计算出这一百个数的和,然后根据你分的份数计算出每份需所有数的大致和应为多少,然后就用一个循环,从第一个元素往后面加,当加到超过上面计算的每份和时就得到分得的一份,后面依次这样,就得到分得的每份!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
lu guo o
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询