需要一个函数得到该数组,输入为n,k。
没有仔细考虑得到了一个油漆匠算法。
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);
分享到:
相关推荐
n皇后问题C语言实现:在n*n的棋盘上放置n个皇后,要求皇后两两互斥,即任意两个皇后不能出现在同一行、同一列或同一条斜对角线上。试求出所有的合法布局。
2019年安徽省程序设计大赛E题,现代艺术 ...给出平面上N个点的坐标点集,求这N个点有多少条整体对称轴.整体对称轴是指一条直线, 对于每个点,都能找到点集中的一个点与他关于这条直线对称 输入 输入的第一行
6. **间接相连的房间**:为了找出所有间接相连的房间,我们需要遍历整个邻接矩阵,如果房间i不能直接到达房间j,但存在房间k使得edges[i][k]和edges[k][j]都为1,那么房间i和房间j间接相连。 7. **连通性判断**:...
3. 对于每个素数p ≤ √N,对于它的每个平方倍数q = p², p³, ..., (p^k) * p,其中p^k * p ≤ N,加回[N/q],即π(N) += [N/q]。 这个算法的时间复杂度为O(√N log log N),在实际应用中,对于10亿以下的N,可以...
非参数检验在统计学中是处理数据分布不均匀或数据不适合正态分布情况的重要方法,尤其在比较多个样本之间的差异时。本篇讨论的是在多个样本的非参数检验中进行两两比较的方法,主要涉及SAS软件的应用。以下是具体的...
本问题来源于一个简单的数学游戏,旨在通过在给定的一系列整数间插入不同的算术运算符(加、减、乘、除)来构造一个表达式,使得该表达式的计算结果最大,同时还需要满足一个额外的条件——最终结果不能包含某个特定...
序列两两比对是生物信息学中的核心算法之一,用于比较和分析两个生物序列的相似性,例如DNA、RNA或蛋白质序列。这个过程涉及到构建一个二维矩阵,通常称为动态规划矩阵,来记录每一对字符之间的匹配程度。在这个过程...
多个样本率的卡方检验及两两比较 卡方检验是统计学中常用的非参数检验方法之一,广泛应用于医学、社会科学、经济学等领域。卡方检验的主要目的是检验两个或多个样本率是否存在显著差异。今天,我们将探讨如何使用 ...
小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢? 输入描述: 输入包含多组测试数据。 对于每组测试数据: N - 本组测试数据有n个数 a1,a2...an - 需要计算的数据 ...
给定n个闭区间[ai, bi](1 <= i <= n),这些区间的并可以表示为一些不相交的闭区间的并。要求在这些表示方式中找出包含不相交区间数目最少的方案。 【输入形式】 输入文件为当前目录下的prz.in。 该文件的第一...
给你几个字母,比如(a,b,c,d,e,f),要求生成所有不重复的组合。 这里重复的定义是这样的,任意两个元素个数相同的组合,如果其包含的元素均两两相等,即视为重复,例如abc和cba就是重复。 嗯,大概意思就是这样,...
(两两相连的房间问题)一所奇怪的房子,这所房子里有n个房间,每个房间里有一些门通向别的房间,可是这些门十分奇怪,它们只能从房间a开向房间b,也就是说,一扇从a开向b的门是不能让一个人从b房间走到a房间的。...
而度约束为2的最小生成树则是在此基础上增加了一个额外的约束条件:每个顶点的度数不超过2。 #### 度约束为2的最小生成树算法原理 在度约束为2的情况下,生成的树实际上是一个环形结构或者由若干条链组成的结构。...
- **问题描述**:假设 \( n = 2^k \),循环赛共进行 \( n-1 \) 天,每位选手要与其他 \( n-1 \) 位选手比赛一场,且每位选手每天比赛一场,不能轮空。 - **赛程表设计**:设计出一个 \( n \) 行 \( n-1 \) 列的赛程...
**最小生成树**:给定一个连通无向图,它的最小生成树是指该图的一个子图,该子图包含原图的所有顶点,并且使得所有顶点之间两两连通,同时这些边的权值之和最小。 **Prim算法**:Prim算法是一种贪心算法,用于求解...
由于人数众多,于是我想做一个根据参赛人数自动生成赛程的Excel表。理论上,对任何有循环和淘汰制的体育比赛(如足球篮球啦)都能用的上。 用了VBA语言,设计一个分组循环对阵以及淘汰对阵算法。并利用Excel自带的...
- `hadamard(n)`:生成n阶的哈达玛矩阵,所有元素为+1或-1,且两两行、列之间的点乘积均为1。 以上就是MATLAB中生成矩阵的基本方法,这些基础知识能帮助你在MATLAB编程中高效地创建和操作矩阵。通过熟练掌握这些...