`
人帅刀猛
  • 浏览: 39185 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

生成不重复的随机数

阅读更多

今天去烟台杰瑞网络面试,有一道题是把10000个不重复的随机数(0-9999)插入buff[10000]中,其实就是要生成10000个不重复的随机数,这个正好我以前在用android写连连看随机配对的时候写过,于是就写了出来,结果解释了一会面试官才看懂....看来这个方法似乎不是主流的方法,于是回来便搜索了一下生成不重复的随机数的文章,发现一个最简单的(喂,这不算是算法了吧!)... 现在把两个算法一起发出来,大家参考一下:

网上的算法:

List<Integer> list = new ArrayList<Integer>();   
        
        for(int i = 1; i <= 6; i++){   
            list.add(i);   
        }   
  
        Collections.shuffle(list);   
           
        for(Integer i : list){   
            System.out.println(i);   
        }   
}

 自己的算法:

/*
	 * 重新生成map,off数组表示已被占用的点
	 * 并返回随机的目标点
	 */
	private int setmap(List<Integer> off){
		System.out.println("setmap");
		//key用于随机,value表示key代表的点
		Map<Integer,Integer> map=new HashMap<Integer,Integer>();
		map.clear();
		int count=1;
		for(int i=0;count<=60-off.size()&&i<60;i++){
			if(!off.contains(i)){
				map.put(count++, i);
			}
		}
		int randomMap=(int) Math.floor(Math.random()*(60-off.size())+1);
		return map.get(randomMap);
	}

 

private void initialize(){
		List<Integer> off=new ArrayList<Integer>();
		
		int randomPic=1;
		do {
			if(off.size()%2==0)
				randomPic = (int) Math.floor(Math.random() * 10 + 1);
			int randomMap = setmap(off);
			off.add(randomMap);
			int x = randomMap /6+1;
			int y = randomMap %6+1;
			// 取得资源id
			ApplicationInfo appInfo = this.getContext().getApplicationInfo();
			int resID = getResources().getIdentifier("p" + randomPic,
					"drawable", appInfo.packageName);
			System.out.println(x+"-"+y+":"+resID);
			bitmap[x][y] = ((BitmapDrawable) getResources().getDrawable(resID))
					.getBitmap();
			pic[x][y]=new Pic();
//			Game.drawImage(canvas, bitmap[i/6][i%6], posx+(i%6)*25, posy+(i/6)*25);
			Rect rect=new Rect(posx+(randomMap%6+1)*25,posy+(randomMap/6+1)*25,posx+(randomMap%6+1)*25+25,posy+(randomMap/6+1)*25+25);
			pic[x][y].setPosx(x);
			pic[x][y].setPosy(y);
			pic[x][y].setRect(rect);
			pic[x][y].setPicName("p" + randomPic);
			pic[x][y].setFlag(randomPic);
			pic[x][y].setShow(true);
		} while (off.size() < 60);
		//边缘x0=45,y0=30
		for(int i=0;i<12*8;i++){
			int x = i /8;
			int y = i %8;
			if(x==0||x==11||y==0||y==7){
				pic[x][y]=new Pic();
				Rect rect=new Rect(posx+(y)*25,posy+(x)*25,posx+(y)*25+25,posy+(x)*25+25);
				pic[x][y].setPosx(x);
				pic[x][y].setPosy(y);
				pic[x][y].setRect(rect);
//				System.out.println("pic["+x+"]["+y+"]:"+pic[x][y].getRect());
				pic[x][y].setShow(false);
			}
		}
	}

 另外,为什么给代码选了颜色就显示出来就变成代码( <SPAN style="COLOR: #888888">)了啊!!!!

分享到:
评论

相关推荐

    易语言取不重复随机数

    在易语言中,生成不重复随机数是一项常见的需求,特别是在游戏开发、数据分析或者算法设计等场景。本文将深入探讨如何在易语言中实现取不重复随机数的功能。 首先,我们需要了解易语言中的随机数生成函数。在易语言...

    VB生成不重复的随机数

    根据提供的标题、描述以及部分代码内容,我们可以总结出在Visual Basic (简称VB)环境中生成不重复随机数的主要方法。此技术常用于各种场景,比如彩票系统、抽奖程序或需要无重复随机选择的应用。 ### 一、基本原理 ...

    生成指定随机数不重复的例子(可用)

    在编程领域,生成指定范围内的随机数而不重复是一项常见的需求,尤其在抽奖系统、密码生成或者数据模拟等场景。...对于开发者来说,理解和掌握这种技巧有助于解决各种需要生成不重复随机数的问题。

    生成不重复随机数的算法

    ### 生成不重复随机数的算法 在许多应用领域中,比如在线考试系统、游戏开发或是数据处理等场景,生成不重复的随机数是一项非常重要的技术。本文将详细介绍几种不同的方法来实现这一功能,并通过具体的Java代码示例...

    VBA生成不重复的随机数源码.txt

    VBA生成不重复的随机数源码.txt

    取不重复随机数.rar

    生成不重复随机数的方法有很多种,以下是一些基本策略: 1. **基本随机数生成**: 在编程中,我们通常使用内置的随机数生成函数,如Python的`random`模块或Java的`Random`类。首先,我们需要设定一个范围,比如0到...

    易语言取不重复随机数.rar

    在“易语言取不重复随机数.rar”这个压缩包中,我们可以找到关于如何在易语言中生成不重复随机数的相关教程或源代码。 在编程中,生成随机数是一项常见的任务,特别是在游戏、模拟、加密等领域。而在易语言中,生成...

    VB.NET生成不重复的随机数

    在VB.NET编程环境中,生成不重复的随机数是一项常见的需求,尤其在进行模拟、测试或者游戏开发时。这里我们将深入探讨如何实现这个功能,并提供一个详细的步骤解释。 首先,我们需要了解VB.NET中的Random类,它是...

    快速生成特定区间内的不重复随机数(随机打乱区间元素顺序)

    首先,我们要明确一点:生成不重复随机数的关键在于避免重复。对于一个给定的区间,例如[0, n),其中n是该区间的上限,我们需要生成n个不同的随机数。传统的做法可能包括使用数组或集合来跟踪已经生成过的随机数,但...

    C#产生不重复的随机数

    第三种方法涉及递归函数,用于生成指定范围内的不重复随机数。核心逻辑如下: 1. 初始化一个`Random`实例,用于生成随机数。 2. 创建一个整型数组`arrNum`,用于存储生成的随机数。 3. 在循环中,调用`getNum`函数...

    产生1到N的不重复随机数

    所以,生成不重复随机数序列的代码可能如下: ```python import random def generate_unique_randoms(N): numbers = list(range(1, N + 1)) random.shuffle(numbers) return numbers ``` 上述方法虽然简单,但...

    Java 产生不重复随机数四种方法

    在Java编程中,生成不重复随机数是一项常见的需求,特别是在模拟抽奖、随机选取样本或创建唯一标识符等场景。本文将详细介绍四种不同的方法来实现这一功能。 ### 方法一:使用HashSet **HashSet** 是Java集合框架...

    C#生成不重复随机数列表实例

    这种方法虽然简单直观,但在大量生成不重复随机数时可能会效率较低,因为每次生成都需要检查整个列表。在处理大数据量的情况下,可以考虑使用其他更高效的算法,如使用`HashSet`或`Dictionary`来存储已生成的随机数...

    python生成不重复随机数和对list乱序的解决方法

    首先,生成不重复随机数的方法。Python的`random`模块提供了`sample`函数,它可以从一个列表或序列中随机抽取指定数量的不重复元素。例如,如果你有一个列表`list = [12, 23, 13, 14, 78, 234, 123, 12345]`,想要...

    ASP生成随机数 ASP生成不重复随机数

    ASP不重复随机数:方法一: 已测使用的时候需要注意里面的分割字符串的字符。 代码如下: &lt;&#37; ‘生成的是一个不重复的数组 Function GetRnd(lowerNum,upperNum) Dim unit,RndNum,Fun_X unit = upperNum – ...

    java生成十个不重复的随机数

    但要生成不重复的随机数,我们不能简单地连续调用`nextInt()`,因为这可能导致重复。一种有效的方法是使用`HashSet`,因为它不允许存储重复元素。 以下是一个简单的示例代码,展示了如何生成十个不重复的随机数: ...

    .NET生成不重复的随机数

    这段代码会打印出1到10之间的不重复随机数。 值得注意的是,这种方法虽然简单,但当需要生成的随机数数量非常大时(如百万级别),性能可能会成为问题,因为频繁地在集合中添加和删除元素会有一定的开销。在这种...

    PHP生成不重复随机数的方法汇总

    PHP编程中生成不重复随机数是一个常见的需求,尤其在需要随机抽取样本或者在游戏开发中生成不重复的卡片、...同时,我们鼓励更多的开发者分享自己独特的生成不重复随机数的方法,让整个社区的技术水平都能够得到提升。

Global site tag (gtag.js) - Google Analytics