请大家指点!
14 个解决方案
#1
unsigned int nSeed = (unsigned)time(NULL);
srand(nSeed);
int nNum=rand()%10+1; //被调用10次就可
srand(nSeed);
int nNum=rand()%10+1; //被调用10次就可
#2
我觉得你这样是不能满足产生10个不同的随机数的。
rand()%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什么头文件;
到现在为止还没有见产生相同的随机数;
仅供参考;
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];
}
混乱写的代码,不过可以保证实现功能哦.
}
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返回该数列
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()产生的不是随机数,而是相同的数.
i=rand()%10;
srand((unsigned int)time(NULL)后一定还要加%rand()或其它随机数,否则rand()产生的不是随机数,而是相同的数.
#10
GetTickCount()*rand()%10;
//GetTickCount() 函数返回的是Windows从开机到现在一共所经历了多长时间,以DWORD显示,所以用这个DW值去和rand()函数所做的操作就一定会是一个随机数
//GetTickCount() 函数返回的是Windows从开机到现在一共所经历了多长时间,以DWORD显示,所以用这个DW值去和rand()函数所做的操作就一定会是一个随机数
#11
xhzxlqt(人这一辈子),xqk(夏乾坤)你们的思路很好,但是我觉得可能没有明白我的意思
我的意思是最好能不用判断语句直接产生10个不重复的整数,比如0-10
我的意思是最好能不用判断语句直接产生10个不重复的整数,比如0-10
#12
没有判断语句啊
#13
洗牌算法不错!结帖!谢谢大家!
#14
产生后比较
#1
unsigned int nSeed = (unsigned)time(NULL);
srand(nSeed);
int nNum=rand()%10+1; //被调用10次就可
srand(nSeed);
int nNum=rand()%10+1; //被调用10次就可
#2
我觉得你这样是不能满足产生10个不同的随机数的。
rand()%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什么头文件;
到现在为止还没有见产生相同的随机数;
仅供参考;
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];
}
混乱写的代码,不过可以保证实现功能哦.
}
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返回该数列
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()产生的不是随机数,而是相同的数.
i=rand()%10;
srand((unsigned int)time(NULL)后一定还要加%rand()或其它随机数,否则rand()产生的不是随机数,而是相同的数.
#10
GetTickCount()*rand()%10;
//GetTickCount() 函数返回的是Windows从开机到现在一共所经历了多长时间,以DWORD显示,所以用这个DW值去和rand()函数所做的操作就一定会是一个随机数
//GetTickCount() 函数返回的是Windows从开机到现在一共所经历了多长时间,以DWORD显示,所以用这个DW值去和rand()函数所做的操作就一定会是一个随机数
#11
xhzxlqt(人这一辈子),xqk(夏乾坤)你们的思路很好,但是我觉得可能没有明白我的意思
我的意思是最好能不用判断语句直接产生10个不重复的整数,比如0-10
我的意思是最好能不用判断语句直接产生10个不重复的整数,比如0-10
#12
没有判断语句啊
#13
洗牌算法不错!结帖!谢谢大家!
#14
产生后比较