package com.kingdz.algorithm.time201701;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 彩票号码由7个1~29的数字组成,7个数字不能重复,生成所有号码的组合
*
* @author kingdz
*
*/
public class Algo16 {
public static void main(String[] args) {
int[] in = { 1, 1, 1, 1, 1, 1, 1 };
int total = 10;
Set<Integer> set;
List<String> list = new ArrayList<String>();
long count = 0;
total++;
while (in[0] != -1) {
set = new HashSet<Integer>();
for (int i : in) {
set.add(i);
}
if (set.size() == in.length) {
System.out.println(Arrays.toString(in));
// list.add(Arrays.toString(in));
count++;
}
in = add(in, 1, total);
}
System.out.println("总共组合数目为[" + count + "]");
if (list.size() > 0) {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(new File("c:/algo14.txt")));
for (String str : list) {
bw.write(str);
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
}
}
}
}
}
private static int[] add(int[] in, int add, int total) {
int length = in.length - 1;
in[length] = in[length] + add;
while (total > 0) {
if (in[length] >= total) {
if (length == 0) {
in[0] = -1;
return in;
}
in[length] = 1;
length = length - 1;
in[length] = in[length] + 1;
} else {
break;
}
}
return in;
}
}
【算法】程序猿不写代码是不对的5
最新推荐文章于 2023-03-11 12:53:26 发布