如何产生10不相同的随机整数(1-10)

时间:2021-12-19 08:05:07
以前看过类似的帖子,忘记具体怎么做了
请大家指点!

14 个解决方案

#1


unsigned int nSeed = (unsigned)time(NULL);
srand(nSeed);

int nNum=rand()%10+1;  //被调用10次就可

#2


我觉得你这样是不能满足产生10个不同的随机数的。
rand()%10 完全可能在产生相同的随机数,请指教

#3


才10个,就死办法吧,检查有重复就再随机一次,前提是整数范围较大。
如果范围小就考虑用集合类型,每出一个数就把它从集合中去掉

#4


每次产生后就和前面所产生的进行比较

#5


for( int i=0 ;i<10 ;i++ )
  int  temp = 10* rand() / MAX_RAND;       //10可以任意改(系统允许范围),2就表示0--2 之间的随机数,依次类推


我是这么用的,较管用 ;
我在VC6.0中调试,也没include什么头文件;
到现在为止还没有见产生相同的随机数;
仅供参考;

#6


比较嘛!

#7


int arr[10];
int s,i;
int l,k;
for(i=0;i<10;i++)
   arr[i]=i;
for(i=0,k=10;i<10;i++;k--)
{
     l=k* rand();
     s=arr[10* rand()];
     arr[l]=arr[k];
}

混乱写的代码,不过可以保证实现功能哦.
}

#8


用洗牌算法:
1生成有序1,...,n的数列(这里n=10),
2生成两个位置随机数,交换这两个位置的数据。
3循环第2步sqr(n)+7次,
4返回该数列

#9


srand((unsigned int)time(NULL)%rand();
i=rand()%10;

srand((unsigned int)time(NULL)后一定还要加%rand()或其它随机数,否则rand()产生的不是随机数,而是相同的数.

#10


GetTickCount()*rand()%10;


//GetTickCount() 函数返回的是Windows从开机到现在一共所经历了多长时间,以DWORD显示,所以用这个DW值去和rand()函数所做的操作就一定会是一个随机数

#11


xhzxlqt(人这一辈子),xqk(夏乾坤)你们的思路很好,但是我觉得可能没有明白我的意思
我的意思是最好能不用判断语句直接产生10个不重复的整数,比如0-10

#12


没有判断语句啊

#13


洗牌算法不错!结帖!谢谢大家!

#14


产生后比较

#1


unsigned int nSeed = (unsigned)time(NULL);
srand(nSeed);

int nNum=rand()%10+1;  //被调用10次就可

#2


我觉得你这样是不能满足产生10个不同的随机数的。
rand()%10 完全可能在产生相同的随机数,请指教

#3


才10个,就死办法吧,检查有重复就再随机一次,前提是整数范围较大。
如果范围小就考虑用集合类型,每出一个数就把它从集合中去掉

#4


每次产生后就和前面所产生的进行比较

#5


for( int i=0 ;i<10 ;i++ )
  int  temp = 10* rand() / MAX_RAND;       //10可以任意改(系统允许范围),2就表示0--2 之间的随机数,依次类推


我是这么用的,较管用 ;
我在VC6.0中调试,也没include什么头文件;
到现在为止还没有见产生相同的随机数;
仅供参考;

#6


比较嘛!

#7


int arr[10];
int s,i;
int l,k;
for(i=0;i<10;i++)
   arr[i]=i;
for(i=0,k=10;i<10;i++;k--)
{
     l=k* rand();
     s=arr[10* rand()];
     arr[l]=arr[k];
}

混乱写的代码,不过可以保证实现功能哦.
}

#8


用洗牌算法:
1生成有序1,...,n的数列(这里n=10),
2生成两个位置随机数,交换这两个位置的数据。
3循环第2步sqr(n)+7次,
4返回该数列

#9


srand((unsigned int)time(NULL)%rand();
i=rand()%10;

srand((unsigned int)time(NULL)后一定还要加%rand()或其它随机数,否则rand()产生的不是随机数,而是相同的数.

#10


GetTickCount()*rand()%10;


//GetTickCount() 函数返回的是Windows从开机到现在一共所经历了多长时间,以DWORD显示,所以用这个DW值去和rand()函数所做的操作就一定会是一个随机数

#11


xhzxlqt(人这一辈子),xqk(夏乾坤)你们的思路很好,但是我觉得可能没有明白我的意思
我的意思是最好能不用判断语句直接产生10个不重复的整数,比如0-10

#12


没有判断语句啊

#13


洗牌算法不错!结帖!谢谢大家!

#14


产生后比较