1-100内产生3个不重复的随机数

ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BerkeleyDBDemo
{
    
class Class16
    {
        
static void Main(string[] args)   
        {   
            DateTime d1 
= System.DateTime.Now;   
            
int[] list1 = GetRandom1(11000005000);   
            TimeSpan dd1 
= System.DateTime.Now - d1;   
  
            DateTime d2 
= System.DateTime.Now;   
            
int[] list2 = GetRandom2(1100000*1005000);   
            TimeSpan dd2 
= System.DateTime.Now - d2;   
  
            
//foreach (int i in list1)   
            
//    Console.Write("{0},", i);   
            
//foreach (int ii in list2)   
            
//    Console.Write("{0},", ii);   
  
            Console.WriteLine(
"第一种方法,1-100000    里取5000个用时:{0}", dd1.TotalMilliseconds);   
            Console.WriteLine(
"第二种方法,1-100000*100里取5000个用时:{0}", dd2.TotalMilliseconds);   
  
            Console.WriteLine(
"判断第二种方法里是否有重复数,如果是5000就是没有重复的:{0}",RemoveDup(list2).Length);   
            Console.WriteLine(
"my test=================");
            
int[] a=GetRandom1(110099);
            Array.Sort(a);
            
foreach(var i in a)
                Console.WriteLine(i);
            
            Console.ReadKey();   
  
        }   
  
        
public static int[] RemoveDup(int[] myData)   
        {   
            
if (myData.Length > 0)   
            {   
                Array.Sort(myData);   
                
int size = 1;   
                
for (int i = 1; i < myData.Length; i++)   
                    
if (myData[i] != myData[i - 1])   
                        size
++;   
                
int[] myTempData = new int[size];   
                
int j = 0;   
                myTempData[j
++= myData[0];   
                
for (int i = 1; i < myData.Length; i++)   
                    
if (myData[i] != myData[i - 1])   
                        myTempData[j
++= myData[i];   
                
return myTempData;   
            }   
            
return myData;   
        }     
  
  
        
//方法1   
        public static int[] GetRandom1(int minValue, int maxValue, int count)   
        {   
  
            Random rnd 
= new Random();   
            
int length = maxValue - minValue + 1;   
            
byte[] keys = new byte[length];   
            rnd.NextBytes(keys);   
            
int[] items = new int[length];   
            
for (int i = 0; i < length; i++)   
            {   
                items[i] 
= i + minValue;   
            }   
            Array.Sort(keys, items);   
            
int[] result = new int[count];   
            Array.Copy(items, result, count);   
            
return result;   
  
        }   
  
        
//方法2   
        public static int[] GetRandom2(int minValue, int maxValue, int count)   
        {   
            
int[] intList = new int[maxValue];   
            
for (int i = 0; i < maxValue; i++)   
            {   
                intList[i] 
= i + minValue;   
            }   
            
int[] intRet = new int[count];   
            
int n = maxValue;   
            Random rand 
= new Random();   
            
for (int i = 0; i < count; i++)   
            {   
                
int index = rand.Next(0, n);   
                intRet[i] 
= intList[index];   
                intList[index] 
= intList[--n];   
            }   
  
            
return intRet;   
        }   
  
    }   

    }
在博问中TerryLee ,丁学给出了自己的答案,但是最后还是google了三番,觉得上面这两种方法是比较不错的实现,最近懒了,发现如果代码绕的弯太大,总想有没有简洁的方法实现,如果太复杂,我就会用最折衷的方法就去实现,代码写的太复杂日后也看不懂, 注意这里没有处理这种情况,当想在1-10中取出11个不重复的数时的情况,这种情况显示会抛出异常,在自己使用时加个异常处理或是判断
posted on 2008-08-03 17:30  lexus 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lexus/archive/2008/08/03/1259327.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值