把n个数分成k份,使其尽量平均

http://www.cppblog.com/humanchao/archive/2007/12/29/39934.html

 #include<stdio.h>

#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
typedef vector<int>       IntVector;
typedef vector<IntVector> IntMat;
 
void DeuceNumber(const IntVector &SourceVecNum,
                 const int       nShare,
                 IntMat          &OutVecVecNum)
{
    IntVector copySourceNum = SourceVecNum;
    sort(copySourceNum.begin(), copySourceNum.end(), greater<int>());
 
    IntVector sum(nShare);
    OutVecVecNum.resize(nShare);
    int len=copySourceNum.size();
    for (int i = 0; i < len ; i++)
    {
        const int nMinSumPos     = min_element(sum.begin(), sum.end()) - sum.begin();
        OutVecVecNum[nMinSumPos].push_back(copySourceNum[i]);
        sum[nMinSumPos] += copySourceNum[i];
    }
}
int main(){
int a[]={8,26,10,19,10,24,11,18,11,21,12,12,17,13,16,14,15,12,16};
int n=3;
IntVector v;
IntMat v2;
v.insert(v.begin(),a,a+18);
DeuceNumber(v,n,v2);
IntVector::iterator it;
IntMat::iterator iit;
iit=v2.begin();
int sum,total=0;
while(iit!=v2.end()){
it=iit->begin();
sum=0;
while(it!=iit->end()){
printf("%d ",*it);
sum+=*it;
it++;
}
total+=sum;
printf(" sum=%d\n",sum);
iit++;
}
printf("%d",total);
return 0;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值