早教吧作业答案频道 -->数学-->
将一组数随意分成三份,求每一份的和,要求最大和与最小和相差最小的算法,
题目详情
将一组数随意分成三份,求每一份的和,要求最大和与最小和相差最小的算法,
▼优质解答
答案和解析
假设输入的所有数据是正整数(有负数的情况会比较复杂,之后讨论),存储在数组unsigned int input[m]里,数组长度是m,从0到m-1是所有数.
你需要一个排序算法将input[]从小到大排列,最小的input[0].
使用三个变量保存三组数的和,称为sum[0],sum[1],sum[2],把输入数字从大到小依次放入当前三个和中最小的那一个,直到所有数字放完,最大的和最小的之间的差就是结果.
使用C语言的话如下:
int mindiff(unsigned int input[], int length) //此时input是排序完毕的,length是数组长度
{
if(length=0;i--)//从第四大的数开始
{
sum[minSumIndex]+=input[i];
minSumIndex=getMinSumIndex(sum);
}
if(sum[(minSumIndex+1)%3]>sum[(minSumIndex+2)%3])
return sum[(minSumIndex+1)%3] - sum[minSumIndex];
else
return sum[(minSumIndex+2)%3] - sum[minSumIndex];
}
int getMinSumIndex(int sum[])
{
int index=0
if(sum[1]
你需要一个排序算法将input[]从小到大排列,最小的input[0].
使用三个变量保存三组数的和,称为sum[0],sum[1],sum[2],把输入数字从大到小依次放入当前三个和中最小的那一个,直到所有数字放完,最大的和最小的之间的差就是结果.
使用C语言的话如下:
int mindiff(unsigned int input[], int length) //此时input是排序完毕的,length是数组长度
{
if(length=0;i--)//从第四大的数开始
{
sum[minSumIndex]+=input[i];
minSumIndex=getMinSumIndex(sum);
}
if(sum[(minSumIndex+1)%3]>sum[(minSumIndex+2)%3])
return sum[(minSumIndex+1)%3] - sum[minSumIndex];
else
return sum[(minSumIndex+2)%3] - sum[minSumIndex];
}
int getMinSumIndex(int sum[])
{
int index=0
if(sum[1]
看了 将一组数随意分成三份,求每一...的网友还看了以下:
2011年西班牙语DELE的B2通过率高吗?2011年的DELE等级的B2通过率怎么样?5月份的那 2020-05-17 …
谁告诉我10个表示快的成语、10个带有近义词的成语、10个什么之最的成语、10个表达各代英雄的成语 2020-05-21 …
关于最的成语最短的季节()最长的腿()最遥远的地方()最贵的稿费()最大的差别()最快的速度()最 2020-06-08 …
形容职位低说话无份量的成语 2020-06-17 …
世界之最的成语最宝贵的话最厉害的贼最宽的嘴巴最贵的话最重的话最准的话最有价值的话最诚的忠言 2020-06-30 …
“最”的成语最怕冷的人最宽阔的胸怀对不起, 2020-07-16 …
按要求找词语、成语表示到极点、到极致、绝顶、最的成语或词语 2020-07-24 …
形容"最"的成语比如说形容学识最广的成语:学富五车才高八斗 2020-07-24 …
所有“之最”的成语例如:最长的腿:一步登天 2020-11-28 …
2014年l0月20日,李克强总理应邀对德国进行正式访问。李总理在回答记者问时指出,中国作为一个负责 2020-12-23 …