题目:
某app需将200元红包分给10个人。每个人分得的金额需满足以下条件:
1.随机的;
2.不少于1分钱;
3.不多于总金额的60%。
现有函数randint(min,max)可以生成区间[min,max]的随机整数,请使用这个函数设计一个分配算法,并用代码表示出来。
分析:
可以参考数学归纳法的思想。
假设已经分配了k-1个人,剩余钱数为remain。
用most表示每人分配钱数上限,用least表示每人分配钱数下限,
第i个人分配钱数为arr[i],
由条件得下面各式:
least <= arr[k] <= most
同样:
least <= arr[k+1] <= most
…
least <= arr[n] <= most
上面n-k个式子相加得:
least*(n-k) <= arr[k+1] + … + arr[n] <= most*(n-k)
又因
arr[k] + arr[k+1] + … + arr[n] = remain
所以
lea