initial commit: lottery 项目集(三工程统一管理)

- apps/lotteryServer, lotteryCapture, lotteryOpen 三个业务工程
- 忽略 archive/, tools/, infra/data/ 大目录与敏感配置文件
- 移除 lotteryServer 原嵌套 git,并入顶层统一管理
This commit is contained in:
feng0207
2026-09-17 19:03:32 +08:00
commit 3fc4dcc777
2251 changed files with 459578 additions and 0 deletions
@@ -0,0 +1,142 @@
package javautils.math;
import javautils.StringUtil;
import java.util.Arrays;
/**
* @Description:组合算法 从M个数中取出N个数,无顺序
* 二维Object数组
* @author :royoan
* @since :2014-6-12 下午10:22:22
* @version :0.0.1
*/
public class CombinationAlgorithm {
/* 原M个数据数组 */
private Object[] src;
/* src数组的长度 */
private int m;
/* 需要获取N个数 */
private int n;
//临时变量,obj的行数
private int objLineIndex;
/* 存放结果的二维数组 */
public Object[][] obj;
public CombinationAlgorithm(Object[] src, int getNum) {
this.src = src;
m = src.length;
n = getNum;
/* 初始化 */
objLineIndex = 0;
obj = new Object[combination(m,n)][n];
Object[] tmp = new Object[n];
combine(src, 0, 0, n, tmp);
}
/**
* <p>
* 计算 C(m,n)个数 = (m!)/(n!*(m-n)!)
* </p>
* 从M个数中选N个数,函数返回有多少种选法 参数 m 必须大于等于 n m = 0; n = 0; retuan 1;
*
* @param m
* @param n
* @return
* @since royoan 2014-6-13 下午8:25:33
*/
public int combination(int m, int n) {
if (m < n)
return 0; // 如果总数小于取出的数,直接返回0
int k = 1;
int j = 1;
// 该种算法约掉了分母的(m-n)!,这样分子相乘的个数就是有n个了
for (int i = n; i >= 1; i--) {
k = k * m;
j = j * n;
m--;
n--;
}
return k / j;
}
/**
* <p> 递归算法,把结果写到obj二维数组对象 </p>
* @param src
* @param srcIndex
* @param i
* @param n
* @param tmp
* @since royoan 2014-6-15 上午11:22:24
*/
private void combine(Object src[], int srcIndex, int i, int n, Object[] tmp) {
int j;
for (j = srcIndex; j < src.length - (n - 1); j++ ) {
tmp[i] = src[j];
if (n == 1) {
//System.out.println(Arrays.toString(tmp));
System.arraycopy(tmp, 0, obj[objLineIndex], 0, tmp.length);
//obj[objLineIndex] = tmp;
objLineIndex ++;
} else {
n--;
i++;
combine(src, j+1, i, n, tmp);
n++;
i--;
}
}
}
public Object[][] getResutl() {
return obj;
}
/**
* 用法实例
* @param args
* @throws Exception
* @since royoan 2014-6-15 下午8:21:05
*/
public static void main(String[] args) throws Exception {
// Integer[] a = new Integer[]{1,2,3,4,5,6};
// CombinationAlgorithm ca = new CombinationAlgorithm(a, 3);
//
// Object[][] c = ca.getResutl();
// for (int i = 0; i < c.length; i++) {
// System.out.println(Arrays.toString(c[i]));
// }
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
String[] a = new String[]{"1", "2", "3", "4", "5"};
CombinationAlgorithm ca = new CombinationAlgorithm(a, 3);
Object[][] c = ca.getResutl();
}
long spent = System.currentTimeMillis() - start;
System.out.println("10万次耗时:" + spent);
// for (int i = 0; i < c.length; i++) {
// System.out.println(Arrays.toString(c[i]));
// }
String[] a = new String[]{"1", "2", "3", "4", "5"};
CombinationAlgorithm ca = new CombinationAlgorithm(a, 3);
Object[][] c = ca.getResutl();
for (int i = 0; i < c.length; i++) {
System.out.println(StringUtil.transArrayToString(c[i]));
}
}
}