1) 有1-7个数
2) 前5个数中有2个出现10次,另3个出现10-20次
3) 第六个数出现10次。其他的都是第7个数。 时间为60秒
2) 前5个数中有2个出现10次,另3个出现10-20次
3) 第六个数出现10次。其他的都是第7个数。 时间为60秒
解决方案 »
- returning into 这个东西怎么用,急用
- 用jsp做论坛系统,用以下四个表可以吗?请高手指点!
- 一个关于hibernate的hbm.xml配置文件的问题
- 100分求,JFreechart如何把下面的类生成JPEG饼装图片
- 用一台计算机可以设置为,既能运行ASP.net和JSP程序吗?
- javabean的调用问题
- JAVA如何存文件到MYSQL数据库中
- 问个jsp网页中用session传参数的怪事?
- 请教:提交表单的时候,是否可以提交img标记的东东,如果可以请问如何提交?
- 能不能帮我解释一下意思啊,特别是那个cacaulate函数部分啊!谢谢
- Struts2的action和ajax交互的时候,为什么页面不刷新它就不显示改变的效果?
- Flex 函数写法解析
* 用例
*/
public static void main(String[] args) {
final int MAX_APPEARS = 600;//最大出现次数
final int SENCONDS = 60;//60秒
final int CYCLE = SENCONDS *1000 / MAX_APPEARS;
int[] appearSequence = createAppearSequence(MAX_APPEARS);
final long END_TIME = SENCONDS *1000 + System.currentTimeMillis();
long nextAppareTime = 0;
int i_appearSequence = 0;
int printIndex = 0;
for(long now = System.currentTimeMillis();now<END_TIME && i_appearSequence<appearSequence.length;now = System.currentTimeMillis()){
if(now<nextAppareTime){
try {
Thread.sleep(1);
} catch (Exception e) {
break;
}
}else{
onAppearTime(appearSequence,i_appearSequence++,printIndex++);
nextAppareTime = now + CYCLE;
}
}
} static void onAppearTime(int[] appearSequence, int i_appearSequence, int printIndex) {
if(appearSequence[i_appearSequence]!=0){//只打印有球的情况
System.out.print(appearSequence[i_appearSequence]);
System.out.print('\t');
if(printIndex%10==9){
System.out.println();
}
}
} /**
* 创建一个所有球的出现序列。
* 该序列是一个数组,里面存放球的编号,当值为0时,说明没有任何球会出现。
*/
static int[] createAppearSequence(int seqLen){
final int MIN_APPEARS = 60;//最小出现次数
Random rand = new Random();
/** 出现次数不定,通过随机数确定当前出现次数 */
int appears = rand.nextInt(seqLen-MIN_APPEARS+1)+MIN_APPEARS;
/** 生成所有要出现的所有球 */
int[] appearBolls = new int[appears];
int i_appearBolls = 0;
for(;i_appearBolls<50;i_appearBolls++){//前五个球每个最少出现10次
appearBolls[i_appearBolls]=(i_appearBolls+10)/10;
}
//前五个球,有三个球可能出现多余10次,选出那三个球。
int[] three_5 = getRandom(rand, 1, 5+1, 3);
//三个球,出现的次数。
int[] appear_tree_5 = new int[]{rand.nextInt(10)+1,rand.nextInt(10)+1,rand.nextInt(10)+1};
for(int i=0;i<3;i++){//填充
for(int j=0;j<appear_tree_5[i];j++){
appearBolls[i_appearBolls++] = three_5[i];
}
}
//编号为6的球,出现10次
for(int i=0;i<10;i++){//填充
appearBolls[i_appearBolls++] = 6;
}
//填充剩余应该出现的球,它们都是编号为7的球
for(;i_appearBolls<appearBolls.length;){//填充
appearBolls[i_appearBolls++] = 7;
}
/** 球的出现序列,填充球的序号,如果填充0则说明,当前这次什么球都不出现。 */
int[] appearSequence = new int[seqLen];
//求出所有应该出现的球在出现序列中的位置
int[] index_appearSequence = getRandom(rand, 0, appearSequence.length, appears);
//利用随机数生成索引数组,打乱appearBolls中球的前后顺序。
int[] index_appearBolls = getRandom(rand, 0, appearBolls.length, appearBolls.length);
//填充球的出现序列
for(int i=0;i<index_appearSequence.length;i++){
// for(int j=0;j<index_appearBolls.length;j++){
appearSequence[index_appearSequence[i]] = appearBolls[index_appearBolls[i]];
// }
}
return appearSequence;
}
/**
* 工具方法,使用rand对象,取c个不重复的随机数,随机数的范围是从m(包含m)到n(不包含n)。
*/
static int[] getRandom(Random rand ,int m,int n,int c){
if(rand==null || m<0 || n<=0 || n-m<c){
throw new IllegalArgumentException("参数不符合规范");
}
int[] result = new int[c];
for(int count=0;count<c;){
int r = rand.nextInt(n-m)+m;
if(!contains(result, r) || r==0){
if(append(result,r,count)){
count++;
}
}
}
return result;
}
/**
* 工具方法,判断数组array中是否存在整数i
*/
static boolean contains(int[] array,int i){
for(int e:array){
if(e==i)return true;
}
return false;
}
/**
* 工具方法,向正整数数组array中添加正整数i
*/
static boolean append(int[] array,int i,int index){
// for(int index=0;index<array.length;index++){
// if(array[index]==0){
array[index]=i;return true;
// }
// }
// return false;
}
}像是游戏的随机条件策略什么的。