1)   有1-7个数
2)   前5个数中有2个出现10次,另3个出现10-20次
3)   第六个数出现10次。其他的都是第7个数。 时间为60秒

解决方案 »

  1.   


    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);
        }
    }
      

  2.   

    用Map应该可以实现吧;
    java.util 
    接口 Map<K,V>
    类型参数:
    K - 此映射所维护的键的类型
    V - 映射值的类型
      

  3.   

    个人的理解是用线程...但是时间60秒不知道怎么限定 可能要判断System.currentTimeMillis()
      

  4.   

    public class Usage { /**
     * 用例
     */
    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;
    }
    }