精华内容
下载资源
问答
  • ASP生成随机数: 代码如下:Randomize ‘纯随机,不重复 Response.write Int((999999999 * Rnd) + 111111111) ‘生成111111111到999999999之间随机数 ASP不重复随机数:方法一: 已测使用的时候需要注意里面的分割...
  • 在 JavaScript 中,一般产生的随机数会重复,但是有时我们需要不重复随机数,如何实现?下面本篇文章给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。javascript 不重复的...

    在 JavaScript 中,一般产生的随机数会重复,但是有时我们需要不重复的随机数,如何实现?下面本篇文章给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

    5e758f4e289fd138.jpg

    javascript 不重复的随机数

    在 JavaScript 中,一般产生的随机数会重复,但是有时我们需要不重复的随机数,如何实现?下面就来讲解三种方法产生不重复的随机数,并进行比较,看那种方法效率高。

    方法一

    思路:首先创建一个1到3000的数组,每次取一个数,然后去除数组中取出的这个数, 这样就可以实现永不重复。

    var count=3000;

    var originalArray=new Array;//原数组

    //给原数组originalArray赋值

    for (var i=0;i

    originalArray[i]=i+1;

    }

    var d1=new Date().getTime();

    for (i=0;i

    var index=Math.floor(Math.random()*originalArray.length); //随机取一个位置

    document.write(index+" , ");

    originalArray.splice(index,1);

    }

    var d2=new Date().getTime();

    document.write("运算耗时"+(d2-d1));

    性能:耗时 1528 毫秒。

    方法二

    思路:对方法一的slice方法进行改进,以提高效率。还是从原数组取出一个数, 然后让原数组的这个位置赋值为null 。下一次取数时判断是否为null,如果是null就不取。

    var count=3000;

    var originalArray=new Array;//原数组

    //给原数组originalArray赋值

    for (var i=0;i

    originalArray[i]=i+1;

    }

    var d1=new Date().getTime();

    for (var num,i=0;i

    do{

    num=Math.floor(Math.random()*count);

    }while(originalArray[num]==null);

    document.write(originalArray[num]+" , ");

    originalArray[num]=null;

    }

    var d2=new Date().getTime();

    document.write("运算耗时"+(d2-d1));

    性能:耗时 290 毫秒。

    方法三

    思路:把原数组打散,然后再依次输出, 这样也可以做到随机永不重复,且效率更高。

    var count=3000;

    var originalArray=new Array;//原数组

    //给原数组originalArray赋值

    for (var i=0;i

    originalArray[i]=i+1;

    }

    var d1=new Date().getTime();

    originalArray.sort(function(){ return 0.5 - Math.random(); });

    for (var i=0;i

    document.write(originalArray[i]+" , ");

    }

    var d2=new Date().getTime();

    document.write("运算耗时"+(d2-d1));

    性能:耗时 229 毫秒。

    更多web前端知识,请查阅 HTML中文网 !!

    展开全文
  • sql 生成随机数 以及不重复随机数
                   

    背景:想在表中随机取10条记录,让取出来的数据不重复(表中必须是有个递增列,且递增从1开始间隔为1)。 

    数据表:

    CREATE TABLE testable 

    id INT  IDENTITY(1,1), 
    myname  NVARCHAR(1000), 
    insertedTime DATETIME DEFAULT SYSDATETIME() 
    )

     

    中共有100条数据,如下

    image 省略……

     

     

     

     

    1.     首先想到的是MSSQL自带的newid()

     

    采用这种方法时,需要将表中所有记录与newid()生成的值进行比较从而进行排序。因此,如果表中的记录较多,操作会非常缓慢。

    image

     

     

     

    USE  Gift163DB
    go
    SELECT  TOP  14  * FROM  dbo.testable   ORDER BY NEWID()

     

    缺点:1. 取出的10条数据会出现重复      2.当数据表数据很多的时候,速度将很慢 (每次重新计算newid)

     

     

     

    2. 自定义函数返回一个表,表中记录的是随机生成的N个id值。

     

    1)rand()生成随机数        rand()*count,CEILING,floor用法 

    2)如果临时表中无此数据,则放入,否则重新生成

    3)直到N条记录已经生成

     

    注意:标量函数function内不能出现rand()方法,变通下生成个view  v_random,然后在函数内调用 v_random获取随机数

    create view v_random
    AS
       
       select CEILING(rand()*51) as random    --注意51,生成的是1到51之间的数字,因为事先知道数据库中有51条记录
    go

     

     

    自定义函数代码如下:

     

    ALTER FUNCTION  randomIntStringWithCommaSplit(@counts int) –counts 表明返回的个数          
    RETURNS @t TABLE (filed1 int)  --返回表@t,有个int类型的 field列
    AS
    BEGIN
      
      DECLARE @randomInt INT
      DECLARE @i INT
      SET @i=0
            WHILE @i<@counts
            BEGIN
              
                     select @randomInt= random FROM v_random
              
              --不能是 SET @randomInt=SELECT random FROM v_random
              IF NOT EXISTS(SELECT TOP 1 * FROM @t WHERE filed1=@randomInt)
               BEGIN
                 INSERT INTO @t VALUES (@randomInt)
                 SET @i=@i+1
               END
            END
      RETURN 
      
    END

     

    上面函数返回的是一个表类型,表中有个int字段,存放要查找的N个不同的keyId  (keyId为要查找表的递增列,且递增为1,从1开始递增)

    所以返回的表中存放的数据是 dbo.Articles中的id列的值。

     

     

    使用:调用上面的自定义函数返回10个不重复的id

     

    SELECT * FROM randomIntStringWithCommaSplit(10)

     

    下面是几次的执行结果,可以看到每个结果中都不存在重复的值(fidled1为临时表的唯一列)

    image image image image image

     

     

    最后通过  select * from table  where id in  randomIntStringWithCommaSplit(10) ,这样就可以从table中随机取出10条不重复的数据来了。

     

     

     

     

    3.存储过程取不重复的数据

     

    --dbo.getRandomDataFromTable 
    --输入参数  @tableName  nvarchar(100),--表名 
    ---@dataCount  nvarchar(100)--取N条数据

     

    输出结果集:列id,存放N条要查询的数据

    USE Gift163DB
    GO
    IF OBJECT_ID ( 'dbo.getRandomDataFromTable', 'P' ) IS NOT NULL 
        DROP PROCEDURE dbo.getRandomDataFromTable;
    GO
    CREATE PROC  [dbo].[getRandomDataFromTable]
    @tableName  nvarchar(100),
    @dataCount  nvarchar(100)
    AS
    BEGIN
      --SET NOCOUNT ON;
        
        DECLARE @t TABLE (id INT)   --临时表
        DECLARE @i  INT             --临时变量
        DECLARE @randomInt INT      --每次随机生成的整数
        DECLARE @tableCount INT     --表的行数
        
        --先获取表中最大数据的id
       EXEC(  'SELECT '+@tableCount+'=COUNT(*) FROM  '+@tableName+'')
        SET @i=0
        WHILE @i<@dataCount
        BEGIN
          SELECT @randomInt=CEILING(RAND()*@tableCount)
          
          IF NOT EXISTS(SELECT TOP 1 * FROM @t)
          BEGIN
              
              INSERT INTO @t VALUES (@randomInt)
              SET @i=@i+1
          END
          
        END
        
        
        --打印出取出的表的id
        SELECT * FROM @t
        
           
      
    END
    Go

     

     

    生成测试数据100条

    USE Gift163DB
    GO
    if exists (select 1
                from  sysobjects
               where  id = object_id('testable')
                and   type = 'U')
       drop table testable
    go
    CREATE TABLE testable
    (
    id INT  IDENTITY(1,1),
    myname  NVARCHAR(1000),
    insertedTime DATETIME DEFAULT SYSDATETIME()
    )
    //插入100条数据
    DECLARE @i INT
    SET @i=1
    WHILE @i<100
    BEGIN
      INSERT INTO tesTable (myname) VALUES ('我的名字是'+CONVERT(NVARCHAR, @i) )   --将 varchar 值 '我的名字是' 转换成数据类型 int 时失败。
      SET @i=@i+1
    End
      

     

     

    调用上面的存储过程从表testable取10条不重复id

     

     

    USE Gift163DB
    go
     exec    getRandomDataFromTable  'testable',10

     

     

     

    image image image

    自定义的存储过程不会出现重复的记录

     

     

     

     

     

    4.改进的存储过程,最终存储过程

     

    输入参数3个:表名,表的递增列名 , 要取的N条数据

     

    USE Gift163DB
    GO
    IF OBJECT_ID ( 'dbo.getRandomDataFromTable', 'P' ) IS NOT NULL 
        DROP PROCEDURE dbo.getRandomDataFromTable;
    GO
    CREATE PROC  [dbo].[getRandomDataFromTable]
    @tableName  nvarchar(100),
    @identityKey NVARCHAR(100),
    @dataCount  nvarchar(100)
    AS
    BEGIN
      --SET NOCOUNT ON;
       
        --DECLARE @t TABLE (id INT)   --临时表
        DECLARE @i  INT             --临时变量
        DECLARE @randomInt INT      --每次随机生成的整数
        DECLARE @tableCount INT     --表的行数
       
       
        
        --先获取表中最大数据的id
       DECLARE @str NVARCHAR(3000)
       SET @str='SELECT @tableCount=COUNT(*) FROM  '+@tableName
       exec sp_executesql @str, N'@tableCount int output', @tableCount output
      
      
       create TABLE #sdf (id int)
       
       
       
        SET @i=0
        WHILE @i<@dataCount AND @i<@tableCount
        BEGIN
          SELECT @randomInt=CEILING(RAND()*@tableCount)
          
          IF NOT EXISTS(SELECT TOP 1 * FROM #sdf WHERE id=@randomInt)
          BEGIN
              
              INSERT INTO #sdf VALUES (@randomInt)
              SET @i=@i+1
          END
          
        END
        
         
        --取出数据
        DECLARE @str2 NVARCHAR(2000)
        
        SET @str2=' SELECT  * FROM '+@tableName
            +' where '+@identitykey
            +' in '
            +' (select id from #sdf )'
            
        
        
        
        PRINT @str2
        --select id from  @t
        
        EXEC (@str2)
        --exec sp_executesql @str2,N'@t TABLE',@t OUTPUT
           
           
       
         
      
    END

     

    调用存储过程:随机取10条数据

    image image

     

    最终的存储过程不管你随机取多少条数据(只要每次取的数据数目小于表中行数) 就可以保证每次取的数据不会重复。当然前提是,取的表必须有个递增列,而且以1开始,递增1.

    昂首阔步,不留一点遗憾
               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • //编程的时候,有三条... 网上搜搜 果然好多方法,有一点是很重要的,随机生成,不能保证是否有重复的,那么用户体验肯定不好,为了用户果断应该选择“不重复的随机生成数的方法” 以下是借鉴别人的好方法 留着...
     //编程的时候,有三条任选执行路径,都会显示一些图片,比如路径1显示的图片是一个人,路径2显示的是两个人,路径3显示任意人数的图片,要求每次进入该页面都不能重复初始的那张图片。 于是我想到了 运用随机生成数来解决。 网上搜搜 果然好多方法,有一点是很重要的,随机生成,不能保证是否有重复的,那么用户体验肯定不好,为了用户果断应该选择“不重复的随机生成数的方法” 
    以下是借鉴别人的好方法 留着备用。
    
    1、获取一个随机整数范围在:[0,100)包括0,不包括100
    
    int x = arc4random() % 100;
    
    2、 获取一个随机数范围在:[500,1000),包括500,不包括1000
    
    int y = (arc4random() % 501) + 500;
    
     
    
    /***********************/
    
    //生成0~9 标记index 的数
    -(NSMutableArray *)getRandomNumber:(NSArray * )temp
    {
       NSMutableArray *tempArray = [[NSMutableArray alloc] initWithArray:temp];
       NSMutableArray *resultArray = [[NSMutableArray alloc] init];
       int i;
       int count = temp.count;
       NSLog(@"count:%d",count);
       for (i = 0; i < count; i ++) {
       int index = arc4random() % (count - i);
       [resultArray addObject:[tempArray objectAtIndex:index]];
       NSLog(@"index:%d,xx:%@",index,[tempArray objectAtIndex:index]);
       [tempArray removeObjectAtIndex:index];
    }
       NSLog(@"resultArray is %@",resultArray);
       return resultArray;
    }
    
    调用:
    
    NSArray* arrary_ScrollView_Single=[[NSArray alloc]initWithObjects:@"111",@"112",@"113",@"114",@"115",@"116",@"117",@"118",@"119",nil];
    
     NSMutableArray * arrary_moment=[selfgetRandomNumber:arrary_ScrollView_Single];
    
     NSLog(@"%@",arrary_moment);
    
    resultArray is (
    
        116,
    
        114,
    
        115,
    
        117,
    
        113,
    
        118,
    
        112,
    
        111,
    
        119
    
    )
    
    //原理
    int index = arc4random() % (count - i); 
    //每取一个。减少一个。比如开始是从0~8 取一个后就少一个。
    [tempArray removeObjectAtIndex:index];
    //最重新的就是这句。它是把array 里的已取到的元素删掉,
     

     

    转载于:https://www.cnblogs.com/someonelikeyou/p/3631529.html

    展开全文
  • 游戏规则: 1-33号红球你可以选择6个球号,1-16号蓝球你可以选择1个...主要功能就是 :随机数生成不重复。 //代码可优化 import java.util.Arrays; import java.util.Random; import java.util.Scanner; import ...

    游戏规则:

    1-33号红球你可以选择6个球号,1-16号蓝球你可以选择1个球号,也可利用系统随机生成,然后利用系统生成红球与蓝球,在进行比较,球号相同数越多,奖励越高哦!

    主要功能就是 :随机数生成不重复。

    //代码可优化
    import java.util.Arrays;
    import java.util.Random;
    import java.util.Scanner;
    
    import javax.swing.JOptionPane;
    
    public class DichroicBall {
    	Random rd = new Random();
    
    	static int[] userRedball = new int[6];// 保存用户选择红球数
    	static int userBlueball = 0;
    	static int[] sysRedball = new int[6];// 保存系统选择红球数
    	static int sysBlueball = 0;
    
    	int userCorrectRedBall = 0;// 记录正确个数
    	int userCorrectBlueBall = 0;
    
    	int Deposit[] = new int[33];// 1-33
    
    	public static void main(String[] args) {
    		DichroicBall db = new DichroicBall();
    
    		db.function();
    		db.function2();
    		db.compareOf(sysRedball, userRedball, userBlueball, sysBlueball);
    		db.sysOutput(sysRedball);
    		db.userOutput(userRedball);
    
    	}
    
    	public DichroicBall() {// 初始化1-33红球号
    
    		for (int i = 0; i < Deposit.length; i++) {
    			Deposit[i] = i + 1;
    		}
    	}
    
    	public void sysOutput(int ball[]) {// 系统生成红球数组输出
    
    		System.out.println("Winning the prize in this issue red Ball Number:");
    		Sort(ball);
    		System.out.println(Arrays.toString(ball));
    		System.out.println("Winning the prize in this issue blue Ball Number:" + sysBlueball);
    
    	}
    
    	public void userOutput(int ball[]) {// 用户生成红球数组输出
    		System.out.println("Red Ball of Your Choice:");
    		Sort(ball);
    		System.out.println(Arrays.toString(ball));
    		System.out.println("Blue Ball of Your Choice:" + userBlueball);
    
    	}
    
    	public void Sort(int ball[]) {//排序算法
    
    		for (int i = 0; i < ball.length - 1; i++) {// 冒泡排序
    			for (int j = 0; j < ball.length - 1 - i; j++) {
    				if (ball[j] > ball[j + 1]) {
    					ball[j] = ball[j + 1] + ball[j];
    					ball[j + 1] = ball[j] - ball[j + 1];
    					ball[j] = ball[j] - ball[j + 1];
    				}
    			}
    		}
    
    	}
    
    	public void compareOf(int[] sys, int[] user, int a, int b) {//用户球数与系统球数比较
    		int len = sys.length;
    		int len2 = user.length;
    
    		for (int i = 0; i < len; i++) {
    			for (int j = 0; j < len2; j++) {// 比较算法可以优化
    
    				if (sys[i] == user[j]) {
    					userCorrectRedBall++;
    				}
    			}
    		}
    
    		System.out.println("Number of Red Ball Winners:" + userCorrectRedBall);
    
    		if (a == b)//蓝球比较
    			userCorrectBlueBall = 1;
    
    		System.out.println("Number of Blue Ball Winners:" + userCorrectBlueBall);
    
    		if (userCorrectBlueBall == 0 && userCorrectRedBall < 3) {
    			System.out.println("Sorry,you didn't win the prize,Please purchase the next issue.");
    			
    		} else if (userCorrectRedBall <= 3) {
    			System.out.println("congratulation! Third Award.");
    		} else if (userCorrectBlueBall == 1 && userCorrectRedBall < 6) {
    			System.out.println("congratulation! Second award.");
    		} else if (userCorrectBlueBall == 1 && userCorrectRedBall == 6) {
    			System.out.println("congratulation! The first prize.");
    		} else {
    			System.out.println("System crash,no charge for this time.");
    		}
    	}
    
    	public void function2() {
    		// 系统随机生成红蓝球
    		computerSelection(Deposit, sysRedball);
    		sysBlueball = rd.nextInt(16) + 1; //1-16
    	}
    
    	public void function() {
    		System.out.println("Two-color ball game begins,please choose:");
    		System.out.println("1:systemselect 2:uesrselect");
    		String num = JOptionPane.showInputDialog("please input 1 or 2:");
    		int num2 = Integer.parseInt(num);
    		while (true) {//可容错
    			if (num2 == 1) {
    				System.out.println("your choice is systemselect");
    				computerSelection(Deposit, userRedball);// 机选红球
    				userBlueball = rd.nextInt(16) + 1;// 机选蓝球
    				break;
    
    			} else if (num2 == 2) {
    				System.out.println("your choice is uesrselect");
    				System.out
    						.println("please selection six red ball number(1-33):");
    				int len = userRedball.length;
    				for (int i = 0; i < len; i++) {
    					userRedball[i] = new Scanner(System.in).nextInt();
    				}
    				System.out
    						.println("please selection one blue ball number(1-16):");
    				userBlueball = new Scanner(System.in).nextInt();
    				break;
    
    			} else {
    				System.out.println("fatal error,please input again:");
    				num = JOptionPane.showInputDialog("please input 1 or 2:");
    				num2 = Integer.parseInt(num);
    			}
    		}
    	}
    
    	// 核心技术,随机数不重复
    	public void computerSelection(int[] Redball, int[] userRedball) {
    		int len = Redball.length;// 33
    		int len2 = userRedball.length;// 6
    		int index = -1;// 下标值
    
    		for (int i = 0; i < len2; i++) {// 循环6次
    
    			index = rd.nextInt(len - i);// 每次减去最后一个,防止随机重复: 1-33 1-32 1-31
    			userRedball[i] = Redball[index];// 先保存在6个红球中,然后将这个球与最后交换位置即可
    
    			int temp = Redball[index];// temp保存要移动的数
    			Redball[index] = Redball[len - 1 - i];// 生成数与(1-33)最后一个交换位置,防止随机重复
    			Redball[len - 1 - i] = temp;//完成交换
    			// 完成后数组 Deposit被打乱
    		}
    	}
    }
    

     

    展开全文
  • 生成指定随机数不重复的例子(解压,放到myeclipse即可用)
  • 用 C# 生成不重复随机数的三种方法第一种方法:利用HashTable/// /// 利用Hashtable /// static int[] UseHashTableToNonRepeatedRandom(int length, int minValue, int maxValue) { Hashtable hashtable = new...
  • 有时候我们需要得到某个区间的不重复随机数,比如我们想获得1-100的不重复随机数方法如下1、数组公式直接生成比较炫技的解法,在A1单元格输入以下公式,然后按下ctrl+shift+enter ,这是一个数组公式=SMALL((COUNTIF...
  • 获得x个随机数。我这里是获取的填写的值, 6 { 7 a = r.Next( 1 , list[ 0 ].num); // 设置范围。我这里是取数据库的数据1~n 8 9 if ( result.Contains(a) ) 10 { 11 i = i - 1 ; // 有...
  • 用GUID生成随机数重复性基本为0)

    千次阅读 2018-04-28 11:09:44
    随机数不管是前端还是后端都会用到的一个...今天简单的讲一下怎么生成随机数重复性很低的一种办法GUID(Globally Unique Identifier)一种由算法生成的二进制长度为128位的数字标识符不重复的原理:GUID 的总数达到...
  • jquery如何生成不重复随机数?下面本篇文章给大家介绍一下JQuery生成不重复随机数的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。JQuery生成不重复随机数酒逢知己千杯少,话不投机半句多...
  • 生成随机数,且随机数不重复,只使用数组,不能使用集合,本次只体现一种方法 提示:以下是本篇文章正文内容,下面案例可供参考 一.成型代码 代码如下(示例): public class HomeWork02 { public static void ...
  • Qt生成随机数的方法

    万次阅读 多人点赞 2016-04-01 13:42:01
    1.生成随机数 生成随机数主要用到了函数qsrand和qrand,这两个函数在#include &lt;QtGlobal&gt;中,qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand...
  • 对于随机数,大家都知道,计算机 可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称 作伪随机数。...
  • 解决了C# Random生成随机数重复问题,并生成随机数的 介绍了五种方法。 没有分的童鞋,可以参考博文,博文里有源码: http://blog.csdn.net/shuai_wy/article/details/78606175
  • random生成随机数范围 [0,1) //产生0-9的随机数 int i= (int)(Math.random()*10); 方法二 利用java提供的Random类 //产生[0,10)的随机数 Random r = new Random(); int k = r.nextInt(10); //生成2-5的随机数 ...
  • Java随机生成6/8/12位数,要求每次产生的随机数与已生成随机数不重复 备注:如果有相同的数据,那么就重新生成一个新的数据: 后台代码如下: public static void main(String[] args) { ...
  • 最近接了一个外包,遇到了一个多线程模拟问题,生成随机数模拟排队,在随机生成0和1输出时,很奇怪发现输出的结果都是一串0一串1,能得到随机交替的结果。 原因探究: 探究了下原因, srand((unsigned int)time...
  • 任何人都可以帮助我制作一个方法来生成随机数而无需在Android中重复?最大数量是:prjcts.size();这是我的JSON数组.返回值应该是整数.我已经拥有的是:int i =(int)(prjcts.size()* Math.random());我将该方法输入3...
  • javascript 如何生成不重复随机数
  • Java生成随机数,几千年不重复
  •  使用过随机数的程序员都知道在程序中并能够实现的真正的完全的随机数函数。随机数函数产生的是通过公式计算出来的一系列伪随机数,这个公式会采用一个种子数计算出一个数,而该数将成为产生下一个数的种子数。...
  • unity随机数不重复出现小代码功能实现。。。。。。。。。。。
  • 一个小Demo,网上有很多类似的代码,测试了一下网上的代码为了随机输出值不重复...通过ArrayList的remove方法实现了生成随机数并随机输出不重复的值比网上的效果好一百倍,没有利用重复循环达到目的不会影响性能 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,215
精华内容 25,686
关键字:

怎么让生成的随机数不重复