Heim > Fragen und Antworten > Hauptteil
阿神2017-04-10 16:36:47
采用数学的方法来解决这个问题
(1)类似于快速排序的方法,一定有一个数大而一个数小
(2)通过类似于高斯当年解决1+。。。+100的想法
`#coding=utf-8
import random
def foo(n, m):
mid = m * 2 // n
duo = m - mid * n // 2
numbers = [random.randint(0,mid) for _ in range(n // 2)]
numbers1 = [mid-i for i in numbers]
numbers.extend(numbers1)
numbers[0] = numbers[0] + duo
if(n%2):
numbers.append(mid//2)
return [i for i in numbers]
if __name__ == '__main__':
res = foo(9,100)
print('10个数为:', res)
print('它们的和为:', sum(res))`
黄舟2017-04-10 16:36:47
很简单,用个循环,采用概率随机数的方法
rand(1,100) 随机出来一个,然后通过减法算出下次的区间比如
rand(1,87) 一直循环,最后一直到剩下的数字作为n次的数字
大家讲道理2017-04-10 16:36:47
来个JavaScript的:每次生成一个余下范围的
// n是个数,v是总和
function lessANumber(n, v) {
var i,
s = 0,
r = [],
x = v;
for (i = 1; i < n; i++) {
x = Math.random() * x;
r.push(x);
s += x;
x = v - s;
}
r.push(x);
return r;
}
迷茫2017-04-10 16:36:47
这是到目前为止题主的说明,在题主自己回答的答案中,提供了另外一个条件,不能有数为零。
所以没有任何说明这个数是什么数,从题主的回答来看也不能是负数。那么我们记题主用来生成这种数的基本的随机数产生函数为函数fn。
1, 使用函数fn,生成N - 1个数大于0,小于100的数,如果相同则舍弃该数,再生产一个
2, 将这N - 1个函数升序排列,在首尾添加0与100,形成N + 1个数的数列A(因为数不能是负数)
3, 计算数列A相邻元素的差值并存入集合S
则集合S即为所需的数集。
如果每个数有最值限制,比如大于a,小于b。已经可以转化再使用上述思路解决。
PHP中文网2017-04-10 16:36:47
假定要求生成的数是整数,如果不要求整数,处理更简单些,还去掉一些限制。
代码如下:
public class Test {
public static void main(String[] args) {
try {
Test.createN(1, 100);
Test.createN(3, 100);
Test.createN(5, 100);
Test.createN(10, 100);
Test.createN(99, 100);
Test.createN(100, 100);
Test.createN(101, 100);
} catch (Exception ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void createN(int n, int t) throws Exception {
if(n>t) {
throw new Exception("Error parameter n("+n+") > t("+t+")");
}
int total = t;
int[] numbers = new int[n];
for(int i=0; i<n-1; i++) {
numbers[i] = new Random().nextInt(total-n+1);
total -= numbers[i];
if(total == n-1-i) {
for(int k=n-1; k>i; k--) {
numbers[k] = 1;
}
break;
}
}
numbers[n-1] = total;
// check
System.out.println(Arrays.toString(numbers));
int s = 0;
for(int i=0; i<n; i++) {
s += numbers[i];
}
System.out.println("The sum is "+s);
}
}
伊谢尔伦2017-04-10 16:36:47
想了一下,我是这样实现的
function numsNone(n){
var nums = [],
result = 0;
for(var i=0; i<n; i++){
nums.push(Math.floor((Math.random() * 100)));
result += nums[i];
}
if(result === 100){
console.log(nums);
return nums;
}else{
return numsNone(n);
}
}
numsNone(3);
迷茫2017-04-10 16:36:47
// 用程序生成n个随机数,要求n个数的和等于100
function ssum($num,$sum)
{
$numArr = [];
$top = $sum-$num+1;
while(true){
$tmp = rand(1,$top);
$numArr[] = $tmp;
$sum = $sum-$tmp;
$top = $sum;
$num--;
if($num == 1){
$numArr[] = $top;
break;
}
}
return $numArr;
}