110,533
社区成员
发帖
与我相关
我的任务
分享
// decimal取值:0.18 to 88
Dicationary<decimal,int> peoples = new Dicationary<deimal,int>();
decimal leftMoney = 500000;
int leftPeoples = 1000000;
Random random = new Random()
for (decimal offset = 0.18; offset<=88; offset+=0.01)
{
int peopleSize=0;
if(leftPeoples <1)
{
peoples[offset] = 0;
}
else
{
do
{
peopleSize= random.Next((int)(leftMoney/offset));
} while( peopleSize <= leftPeoples );
peoples[offset] = perpleSize;
leftMoney -= perpleSize*offset;
leftPeoples -= peopleSize;
}
}
//总计循环次数:8800-18次
var d = 2 * (金额 - a1 * 人数) / (1.0 * 人数 * (人数 - 1));
这里。当我没有写1.0的时候(使用整数做分母的时候),误差很大。var 金额 = 500000;
int 人数 = 1000000;
var a1 = 0.18;
//等差数列求和 金额=a1*人数+(人数-1)*人数*d/2
var d = 2 * (金额 - a1 * 人数) / (1.0 * 人数 * (人数 - 1));
decimal a = (decimal)a1;
decimal sum = a;
List<decimal> result = new List<decimal>(人数) { a };
for (var i = 1; i < 人数 - 1; ++i)
{
a1 += d;
a = Math.Round((decimal)a1, 2); //舍掉毫厘
result.Add(a);
sum += a;
}
result.Add(((decimal)金额) - sum); //最后一人分得的
最后两人分得的都是 0.82 元。