‘壹’ java 生成k个50~100之间的随机整数
实现思路:生成50-100之间的随机数(包括50,包含100),之后循环k次分别输出即可:
intk=5;
for(inti=0;i<k;i++){
Randomrand=newRandom();
intrandNum=rand.nextInt(50)+50;
System.out.println(randNum);
}
实现思路:获取到最大数减去最小数的值作为随机生成的数,之后得到的值加上最小数,就是所需要的数值。
‘贰’ 如何生成一定范围内不重复的随机数
我不知道你什么语言我提供一个思路吧!
用户名+时间(毫微秒)+永无重复的随机数组
此套算法适合文件上传时用于解决文件名重复问题
理解:
用户名:确保用户名不重复,以此限制重复的可能性仅仅出现在某个具体用户的操作中!
毫微秒(Ticks):此数重复的可能性极低。
随机数组:方法是,确认要上传几个文件并记录数量,然后循环出一个随机数组,判断:若当前随机出的数字包含在数组中则循环次数+1(也就是当前循环变量-1)回跳一次循环,以此循环出与文件数相等的随机数组;此处再一次保证具体某一个用户在单次多文件上传时不会出现文件同名情况。
若功能符合上述条件,则可以做到永无重复的文件名!
随机数组代码:
int[] intNum = new int[FileCollect.Count];
for (int i = 0; i < FileCollect.Count;i++ )
{
Random dom = new Random();
int domNum = dom.Next(0, 20000);
if (intNum.Contains(domNum)&&i!=0)
{
i = i - 1;
}
else
{
intNum[i] = domNum;
}
}
‘叁’ delphi中random取不重复的随机数。
1、前面0的问题是因为(假定你现在输入的是5,即num为5),数组长度为5,但是随机数取值是random(5+1),也就是随机数值是从0-5一共6个数,那自然有一个取不到。
2、改成random(num)的时候,for k:=0 to i do个人感觉应该是for k:=0 to i-1 do
3、随机数算法有很多简单的方法,比goto什么简单的多,比如最常见的伪算法
a.创建数组x[n],并对每个元素赋值(比如说随机数在0-n之间),那就x[0]=0、x[1]=1至x[n]=n;
b.从x[0]开始至x[n],将元素随机与x[0-n]之间的任意一个数字交换
如果是delphi2010以上,也有TDictionary这类东西
‘肆’ C#如何生成随机不重复的数字
private string RndomStr(int codeLength)
{
//组成字符串的字符集合 0-9数字、大小写字母
string chars = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] charArray = chars.Split(new Char[] { ',' });
string code = "";
int temp = -1;//记录上次随机数值,尽量避避免生产几个一样的随机数
Random rand = new Random();
//采用一个简单的算法以保证生成随机数的不同
for (int i = 1; i < codeLength + 1; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));//初始化随机类
}
int t = rand.Next(61);
if (temp == t)
{
return RndomStr(codeLength);//如果获取的随机数重复,则递归调用
}
temp = t;//把本次产生的随机数记录起来
code += charArray[t];//随机数的位数加一
}
return code;
}
//生成随机数字方法
public class RandomHelper
{
/// <summary>
///生成制定位数的随机码(数字)
/// </summary>
/// <param name="length"></param>
/// <returns></returns>
public static string GenerateRandomCode(int length)
{
var result = new StringBuilder();
for (var i = 0; i < length; i++)
{
var r = new Random(Guid.NewGuid().GetHashCode());
result.Append(r.Next(0, 10));
}
return result.ToString();
}
}
‘伍’ 用EXCEL随机抽取并且不重复。
方法一:公式法
1、我们以生成1-10范围内的随机数字为例,讲述方法。
首先,在A2单元格中输入公式:=SMALL(IF(COUNTIF($A$1:A1,ROW($1:$11))=0,ROW($1:$11)),INT(RAND()*(11-ROW(A1))+1))
然后按下Ctrl+Shift+Enter三键结束数组公式。
‘陆’ 求一个特定区域内产生随机数不重复的算法。
解答如下:
像这种题目就是求全排列的类型。
现在你题目中有y个数字,
第一次抽取时,共有y个数字可供选择,因此有y种可能性。
第二次抽取时,因不能重复,所以共有y-1个数字可供选择,因此有y-1种可能性。
第三次抽取时,也因不能重复,所以只有y-2个数字可供选择,因此有y-2种可能性。
根据上面可以类推出第四次,第五次……第y次
因此具体的答案就为:y*(y-1)*(y-2)*(y-3)……*{y-(y-1)} = y!
‘柒’ 在n个元素中随机挑选k个不重复元素,该怎么选
import java.util.Random;
public class vder {
public static void main(String[] args) {
int a[]={1,2,3,4,5,6,7,8,9,0};
boolean r[]=new boolean[a.length];
Random random = new Random();
int m = 5; //要随机取的元素个数
if(m > a.length || m < 0)
return;
int n = 0;
while(true)
{
int temp = random.nextInt(10);
if(!r[temp])
{
if(n == m) //取到足量随机数后退出循环
break;
n ++;
System.out.println("得到的第" + n +"个随机数为:" + temp);
r[temp ] = true;
}
}
}
}
‘捌’ 如何产生100个不重复的随机数
可以考虑先把这100个数放在一个数组内,每次随机取一个位置(第一次是1-100,第二次是1-99,...),将该位置的数与最后一个位置的数对调就可以了。
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int [] arr=new int[101];
int i;
//初始化数组
for(i=1;i<=100;i++)
{
arr[i] = i;
}
//随机数
Random r = new Random();
for (int j = 100; j >= 1; j--)
{
int address = r.Next(1,j);
int tmp = arr[address];
arr[address] = arr[j];
arr[j] = tmp;
}
//输出
foreach (int k in arr)
{
Console.Write(k+" ");
}
}
}
}
‘玖’ 看到一个excel生成不重复随机数的很牛的公式。请高手替我详细解释一下下面的这个公式
按照公式原理一步一步说明:
ROW($1:$100)是生成了一个1到100的数组
INDIRECT("R[-"&ROW()-(ROW()>1)&"]c:r[-1]c",0)是第一行至前一行的引用,如公式在第8行,那么这个公式的结果就是引用第1行至第7行,如公式在第1行,则结果为0。
COUNTIF的作用是计算1到100这个数组的元素在前几行有那些元素出现,生成了一个100个元素的一维数组,类似0,0,0,0,1,0,0,1......,总共100位,其中第5个数为1,代表5在前几行已经出现,第8个数为1,代表8在前几行已经出现.
countif在乘以101,再加上ROW($1:$100),结果是一个数组,结果为1,2,3,4,106,6,7,109。。。(前几行出现的数都会大于等于102,如5、8)。这是small函数的第一个参数:数组。
INT(RAND()*(101-ROW(A1)))+1,生成一个随机数,此随机数与行数有关,行为1,则随机数范围为1到101-1,行为2,则随机数范围为1到101-2。这是small函数的第二个参数:k。
small函数的作用是取一个数组中第k个最小的数,如果公式在第45行,那个第一个参数里有44个数大于等于102,剩余56个数小于等于100且小于那44个已经出现的数,第二个参数为1到56(即101减去45)的随机数k,相当于从剩余56个最小的数中取第k个最小的数,既实现了随机性,又满足1到100的整数,且不与前边重复。
同理,1到100行的数均是按照上述原理实现的。
‘拾’ C语言如何产生不重复的随机数
用一个数组装随机数,一个数组表示已经记录过的随机数;
比如说随机0-8,生成一个随机8位数组且数组内各项不重复;
例:
intarray[8];
intarrayIndex[8]={0,0,0,0,0,0,0,0};
intk=0;
srand(100);
while(k<8){
intq=rand()%8+1;
if(arrayIndex[q-1]==1){
continue;
}
array[k]=q;
arrayIndex[q-1]=1;
k++;
}
(10)获取k个不重复随机数经典算法扩展阅读
C语言随机输出1~20不重复的随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
voidmain()
{
inta[20];
inti,j;
srand((int)time(0));
a[0]=rand()%20+1;
for(i=1;i<20;i++)
{
a[i]=rand()%20+1;
for(j=0;j<i;j++)
{
if(a[i]==a[j])
{
i--;
}
}
}
for(i=0;i<20;i++)
{
printf("%3dn",a[i]);
}
}