浏览 1343 次
锁定老帖子 主题:生成不大于n的k个两两不同的自然数
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-20
最后修改:2010-08-02
没有仔细考虑得到了一个油漆匠算法。 private static int[] f(int n, int k) { boolean[] bits = new boolean[n + 1]; Random r = new Random(); // k次循环,设置那些数出现在结果里。 for (int i = 0, stepRange = n + 1; i < k; i++, stepRange--) { // 设置第几个为空的位。从0开始。 int step = r.nextInt(stepRange); for (int j = 0;; j++) { if (bits[j] == false && step == 0) { bits[j] = true; break; } else if (bits[j] == false) { step--; } } } int values[] = new int[k]; for (int i = 0, index = 0; i < bits.length; i++) { if (bits[i]) { values[index++] = i; } } // 混乱函数 shuffle(values); return values; } 忍不住鄙视一下自己。这个函数真是超烂。本来很简单的一个事情竟然被我搞得那么复杂。程序员还是应该思而后动的。 int[] n_array = new int[n + 1]; for (int i = 0; i < n_array.length; i++) { n_array[i] = i; } shuffle(n_array); int[] k_array = new int[k]; System.arraycopy(n_array, 0, k_array, 0, k_array.length); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |