1) 有1-7个数
2) 前5个数中有2个出现10次,另3个出现10-20次
3) 第六个数出现10次。其他的都是第7个数。 时间为60秒
解决方案 »
- 新手提问!!一元稀疏多项式计算器问题!
- JAVA如何实现音频的对比
- JAVA 中 new File(".")是什么意思?
- 发个行转列的代码,顺便和大家交流下平时大家都怎么处理行转列
- Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 有一个可以直接NEW 来代替他的方法是什么???
- 关于servlet输出到文本.txt如何修改数据
- 如何利用反射技术动态创建内部类的实例
- 急急急!!!!!!!!
- 請教有bc4j開發經驗的朋友
- 请问???我如何可将tomcat爆露目录的功能给去掉???
- 匹配‘001001 瓶子 个 10.00 20.00 邵阳’的正则表达式
- 二叉树排序输入的问题(java写)
import java.util.LinkedList;
import java.util.List;
import java.util.Random;public class Hello {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5, 6, 7};
List<Integer> result = new LinkedList<Integer>(); // 打乱前5个
Random rand = new Random(System.nanoTime());
for (int i = 0; i < 10; ++i) {
int r = rand.nextInt(5);
int temp = a[r];
a[r] = a[4 - r];
a[4 - r] = temp;
} // 前2个为10次
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 10; ++j) {
result.add(a[i]);
}
} // 另3个出现10到20次
for (int i = 2; i < 5; ++i) {
int n = rand.nextInt(11) + 10;
for (int j = 0; j < n; ++j) {
result.add(a[i]);
}
} // 第6个10次
for (int j = 0; j < 10; ++j) {
result.add(a[5]);
} // 第7个随便来个8次吧
for (int j = 0; j < 8; ++j) {
result.add(a[6]);
} System.out.println(result);
}
}
java.util
接口 Map<K,V>
类型参数:
K - 此映射所维护的键的类型
V - 映射值的类型
* 用例
*/
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;
}
}