读书人

求解决一个函数的算法?该怎么解决

发布时间: 2013-08-01 15:23:18 作者: rapoo

求解决一个函数的算法?????
本帖最后由 wangsiyuanoo 于 2013-07-22 18:13:32 编辑


unsigned int iTotalNum = 25; //总和
unsigned int iPileNum = 10; //堆叠数
vector<int> vecNum;
GetPileNums( 25, 10, vecNum );

void GetPileNums( unsigned int iTotalNum,
unsigned int iPileNum,
vector<unsigned int> &vecPileNums )
{
//vecPileNums存放iPileNum个数字
//存放的每个数字都必须不一样的数字,但这些数字加起来的总和又必须等于iTotalNum
//存放的每个数字不能是负值!
//请问如何实现这个函数?
}

[解决办法]
#include <vector>
#include <iostream>

using namespace std;

void GetPileNums( unsigned int iTotalNum,
unsigned int iPileNum,
vector<unsigned int> &vecPileNums )
{
//vecPileNums存放iPileNum个数字
//存放的每个数字都必须不一样的数字,但这些数字加起来的总和又必须等于iTotalNum
//存放的每个数字不能是负值!
//请问如何实现这个函数?
unsigned int min_total;
unsigned int i;

if (iPileNum > 0) {
min_total = (1 + iPileNum) * iPileNum / 2;
if (iTotalNum >= min_total) {
for (i = 1; i < iPileNum; ++i) {
vecPileNums.push_back(i);
}
vecPileNums.push_back(i + iTotalNum - min_total);
}
}
}

int main()
{

unsigned int iTotalNum = 251; //总和
unsigned int iPileNum = 10; //堆叠数
vector<unsigned int> vecNum;

GetPileNums( iTotalNum, iPileNum, vecNum );

for (vector<unsigned int>::iterator it=vecNum.begin(); it != vecNum.end(); ++it) {
cout << *it << endl;
}

return 0;
}


读书人网 >C++

热点推荐