怎样才能让一下函数产生的随机数不会重复

王晓瀚 2013-04-18 10:05:44
#include <stdio.h>
#include <stdib.h>
void main()
{ int i;
unsigned seed;
printf("please input seed:");
scanf("%u",&seed);
srand(seed);
for(i=0;i<10;i++)
printf("%3d",1+rand()%100);
printf("\n");
}
...全文
639 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
武稀松 2013-07-08
  • 打赏
  • 举报
回复
先把你的数放到一个List中 1.产生随机数范围是List.Size()-1. 2.每产生一个随机数,就把List中这个数删除 重复1,2就可以了
  • 打赏
  • 举报
回复
顶9楼
彭家老三 2013-07-08
  • 打赏
  • 举报
回复
生成m个小于n不重复的随机数 1、首先生成一个值为0到n-1的数组 2、随机选择数组中一个下标,把该下标的值与第一个元素交换。 3、从第二个元素到最后一个元素继续随机选择下标,与第二个元素交换。 4、一直到m次,数组前面m个元素就是符合题意的不重复随机数。
wenyongjie 2013-07-07
  • 打赏
  • 举报
回复
int __fastcall Pub_GetRand(float MIN, float MAX) //其中MIN,MAX为你要求的随机数的上下限 {
float max; max=RAND_MAX; srand( (unsigned)time( NULL ) ); //随机数计时开始 return (int)(rand()*(MAX-MIN)/max+MIN); } //-------------------
cankoo 2013-06-09
  • 打赏
  • 举报
回复
楼主问的问题在现实生活中是非常常见的!典型的是扑克牌的刷洗。 这是非常简单的也是最基本的概率论的问题。先把数学公式写出来。
laowang2 2013-06-05
  • 打赏
  • 举报
回复
只能是在某个范围内不重复
lhy 2013-06-02
  • 打赏
  • 举报
回复
或者把一个数字列打乱。
lhy 2013-06-02
  • 打赏
  • 举报
回复
只能是在某个范围内不重复吧。
星際訪客 2013-06-01
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
const int NUM_MAX = 100; /* 範圍給定 */
void main()
{
	int val[NUM_MAX];
	int i, r;
	unsigned seed;
	/* 設定虛擬隨機種子 */
	printf("please input seed:");
	scanf("%u", &seed);
	srand(seed);
	for (i = 0; i < NUM_MAX; i++) val[i] = i + 1; /* 建立一個漸進值數組 */
	/* 以洗牌法隨機對換數組裡的值...產生不重複隨機數 */
	for (i = 0; i < NUM_MAX; i++) {
		r = random(NUM_MAX);
		/* 無暫存交換法 */
		val[i] += val[r];
		val[r] = val[i] - val[r];
		val[i] -= val[r];
	}
	for (i = 0; i < 10; i++) printf("%3d", val[i]);
	printf("\n");
	system("pause"); /* 請按任意鍵繼續... */
}
星際訪客 2013-06-01
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
const int NUM_MAX = 100; /* 範圍給定 */
void main()
{
	int val[NUM_MAX];
	int i, r;
	/* 起始設定亂數產生器 */
	randomize();
	for (i = 0; i < NUM_MAX; i++) val[i] = i + 1; /* 建立一個漸進值數組 */
	/* 以洗牌法隨機對換數組裡的值...產生不重複隨機數 */
	for (i = 0; i < NUM_MAX; i++) {
		r = random(NUM_MAX);
		/* 無暫存交換法 */
		val[i] += val[r];
		val[r] = val[i] - val[r];
		val[i] -= val[r];
	}
	for (i = 0; i < 10; i++) printf("%3d", val[i]);
	printf("\n");
	system("pause"); /* 請按任意鍵繼續... */
}
星際訪客 2013-06-01
  • 打赏
  • 举报
回复
通常任意產生隨機數容易重複...若要產生不重複隨機數...過程上會有反覆比對的過程而顯得沒效率...... 所以必須使用有效率的給定範圍洗牌法~
lyp371 2013-05-31
  • 打赏
  • 举报
回复
randmize(); random(10000)%100; 我一般是这么干的
hyz_cs 2013-04-20
  • 打赏
  • 举报
回复
我之前想的方法是 做一个类似链表,100个,每个里面存一个值,然后 生成一个随机数 %100,把对应位置的数取出来,接着从链接中删去,再生成随机数%99....这样循环100次.
hyz_cs 2013-04-20
  • 打赏
  • 举报
回复
楼主要的是不是10次或更多次里面随机出来的值要全部不一样的.
我不懂电脑 2013-04-19
  • 打赏
  • 举报
回复
代码里已经用srand置了随机种子,保证随机种子不同 ,产生的随机数序列就是不同的。但是同一个序列里有数字重复是正常的。
勉励前行 2013-04-19
  • 打赏
  • 举报
回复
用一个随机数或者实时钟做随机种子。
sololie 2013-04-18
  • 打赏
  • 举报
回复
存在不重复的随机数吗?得先假定范围吧

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧