一道随机算法的研究!

        朋友问我一个问题:“随机出来1~100中的10个数字,不能有任何重复的数字出现,但是要求不能每次对随机出的数进行验证”,要是没有最后一个要求那就很简单了,不能对每次随机的数字进行验证,这就是说要一次随机出来的数字就是唯一的,这也就是说下一次随机的数组中就不能有已经输出的数字了,呵呵,想到一个办法,
        1、把你最终的结果预先放在一个数组中;
  2、random产生一个随机下标,我们取出对应的数组中的值;
        3、然后用数组最后一个值替换下标数组中的值;
        4、将产生随机下标的范围逐个减少1;
    public   class   MyRandom1{
                private static  Random random=new  Random();
                public  static  void main(String[ ] args ){
                int NUM=100;
                int cont[ ]=new int[NUM];
                for (int i=1;i<NUM;i++){
                      cont[i]=1;
                } 
               for(int j=0;j<NUM;j++){
                 int index=random.nextInt(100);
                 System.out.println("The random number is :"+cont[index]);
                 cont[index]=cont[NUM-1-j];
                }
            }

};
    这个不是很好的算法就解决了这个问题,由于数字很少,使用一个简单的数组就能解决问题了,随之而来,我找个了一个很好的题目:
        某单位要设计一个考核,题库里总共有100道题目,其中30道选择题,30道填空题,20道问答题,20道论叙题;每次出题采用的是考生自己选择考核时间然后电脑随机出题,每次出20道选择题,20道填空题,10道问答题,10道论叙题,每张试卷出题不能有重复,确定考核开始,开始时间倒记时,考核时间可以由考核人员确定,距离结束时间5分钟出现对话框时提示考生,还有30秒时出现声音提示,时间到了准时自动交卷;
      这个到记时以及出现对话框的设计都很简单,重点他也有个要求,就是和上面的要求一样,不要验证,并且不能模仿上面的算法,晕,存心刁难...........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值