大致算法如下:
定义一个数组都初始化为0用来储存1~6的使用的次数,
如calc[7](a[0]不用)
calc[1]~calc[6]分别储存1~6的使用的次数
每当产生一个随机数放入temp,若calc[temp]>2则重新产生直到calc[temp]<=2才把pNumber=temp
然后calc[temp]++
具体程序由于我不会NSMutableArray我把它放在num数组中
#include<iostreamh>
#include<stdlibh>
#include<timeh>
voidmain()
{
srand((unsigned)time(NULL));
inttemp,calc[7]={0},num[13];
inti;
for(i=1;i<=12;i++)
{
while(1)
{
temp=rand()%6+1;
if(calc[temp]<2)
{
num[i]=temp;
calc[temp]++;
break;
}
}
}
for(i=1;i<=12;i++)
cout<<num[i]<<endl;
}
可以使用库函数rand()。
rand声明于stdlibh,其原型为
int rand(void);
功能为返回一个随机整型值。在C语言中,该值是一个正数值。
在需要限定获取到的随机数范围时,如范围要求为[m,n] m<n且m,n均为整数,可以用
rand()%(n-m+1)+m
的形式进行获取。原理为:
%为取余计算,当%k时,结果是[0,k-1]之间的数值;
于是rand()%(n-m+1) ∈ [0, n-m];
所以rand()%(n-m+1)+m ∈ [0+m, n-m+m]=[m,n]。
方法1
(数据类型)(最小值+Mathrandom()(最大值-最小值+1))
例:
(int)(1+Mathrandom()(10-1+1))
从1到10的int型随数
方法2
获得随机数
for (int i=0;i<30;i++)
{Systemoutprintln((int)(1+Mathrandom()10));}
(int)(1+Mathrandom()10)
通过javaMath包的random方法得到1-10的int随机数
公式是:最小值---最大值(整数)的随机数
(类型)最小值+Mathrandom()最大值
方法3
Random ra =new Random();
for (int i=0;i<30;i++)
{Systemoutprintln(ranextInt(10)+1);}
通过javautil包中的Random类的nextInt方法来得到1-10的int随机数
生成0到1之间的任意随机小数:
生成[0,d)区间的随机小数,d为任意正的小数,则只需要将nextDouble方法的返回值乘以d即可。
[n1,n2]
也就是 ranextDouble() (n2-n1)+n1
以上就是关于在c语言如何获取一个各位都不相同的随机数全部的内容,包括:在c语言如何获取一个各位都不相同的随机数、如何在随即个随机数中获取其中的随机数、java获取随机数的几种方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)