网络贷款的危害的例子:求一个算法思想!!!

来源:百度文库 编辑:中科新闻网 时间:2024/05/03 00:26:36
例子:把1,2,3,4,5,6,7,8,9随机分给数组a
使得a中的元素各不相同

也就是说把n个不同的数随机放到n个盒子里
随机产生一种分配方法。

请大家说说自己的算法思想
有能力的人可以用Java写出来方法

思想:
用2个数组,一个是最后要求的答案,即a数组,另一个b数组里面放1~9的值。用随机函数生成1~9之间的随机数,然后将该随机数作为b数组下标,将该元素的值赋给a数组第i位。然后用b数组中的最前/最后1个元素来覆盖刚才随机抽取的元素。同时,要求下次生成随机数的条件是随机数>i。

可能写的不太清楚,以下提供了参考代码:

public class demo {
int[] a;

int[] b;

public demo() {//构造器
a = new int[9];
b = new int[9];
for (int i = 0; i < 9; i++) {
a[0] = 0;
b[i] = i + 1;
}
}

public void test() {
int index = 0;
for (int i = 0; i < 9; i++) {
do {
index = (int) (Math.random() * (9 - 1) + 1);
} while (index < i);
a[i] = b[index];
System.out.println("a=" + a[i]);
b[index] = b[i];
}
}

public static void main(String[] Args) {
demo d = new demo();
d.test();
}
}

for (i=0;i<9;i++)
{
产生随机数Xi
Xi=Xi*10+i
}
对Xi排序
for (i=0;i<9;i++)
{
Xi=Xi%10+1;
ai=Xi
}

把它看作洗牌1-9顺序排好,
随即产生一个1-8之间的数n
把[1-n-1]与(n-1,9]交换位子,反复做几次

排列组合,留个位子

问题不是很难实现

我想你是想要最优化的算法吧

用数学方面说是n!就好了:n*(n-1)*……3*2*1 这是縂排法数目,取其中一个的概率就是1/n!