求解决一个函数的算法?????
本帖最后由 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;
}