c语言中如何产生一定比例的随机数?

比如 想产生100个随机数 其中10个-1 50个0 40个1 ,这10个-1、50个0、40个1要均匀散开到这100个数里面去 不能扎堆。听说 rate 能实现 但不会用 求指导

说明:
我原来做扑克牌游戏的时候,洗牌和你是类似的。
最笨的方法。数组开始赋初值 10个-1,50个0,40个1
然后随机产生2个数,将数组着两个位置的元素交换。 交换100次就可以了。

测试效果:

0 -1 0 0 1 0 0 1 1 1
0 0 0 0 0 0 -1 1 1 0
0 0 -1 1 0 1 0 1 1 -1
0 0 0 0 0 0 0 0 0 0
1 0 0 0 -1 1 0 -1 0 -1
0 1 0 1 1 0 0 -1 0 0
1 1 0 1 1 1 1 1 -1 -1
1 0 1 0 1 0 1 1 0 0
1 0 0 1 1 1 1 1 1 1
1 0 1 0 0 0 1 1 0 1

1 -1 0 -1 1 0 1 0 0 1
0 0 0 0 0 0 1 0 0 0
0 1 -1 -1 0 0 1 1 0 0
0 0 0 0 1 0 0 0 -1 0
0 0 1 1 1 0 1 0 1 1
1 0 1 1 1 0 1 0 0 1
1 0 1 -1 1 1 0 1 0 0
1 1 0 1 0 1 0 0 0 1
1 0 1 1 0 1 0 1 -1 0
1 -1 -1 1 0 -1 1 0 1 0

源代码:
#include "stdio.h"
#include "conio.h"
#include <time.h>
#include <math.h>
#include<stdlib.h>

main()
{
int i,m=0,n=0,temp=0;
int a[100];
time_t t;
srand((unsigned)time(&t));

for(i=0;i<100;i++)//赋初值
{
if(i<10)
a[i]=-1;
else if (i<60)
a[i]=0;
else
a[i]=1;
}
for(i=0;i<100;i++)//随机打乱
{
m=rand()%100;
n=rand()%100;
temp=a[m];
a[m]=a[n];
a[n]=temp;
}

for(i=0;i<100;i++)//打印数组
{
if(i%10==0)
printf("\n");
printf("%2d ",a[i]);
}
getch();
}

你说的那个rate我做遗传算法的时候做过。模拟变异的概率。但是你看看
我们随机产生一个数X X∈【0,100)
如果X《10 那么我们给数组则个元素赋值-1
10<=x<60 赋值0
60<=x<100 赋值1
但是既然是随机的。所以只能期望上保证出线的机会是1:5:4 .生成大的样本的时候可以无限逼近这个效果。所以还是用第一种靠谱的方法吧。

楼主好运!
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答