我一组数字,比如
{34,23,353,324,32,113,44,22,..}
我要随便取一个出来,
并且要求根据它们的值来决定机率,
数值最小的机率最大。。我搞不定啊,请大侠教教~~~~~
{34,23,353,324,32,113,44,22,..}
我要随便取一个出来,
并且要求根据它们的值来决定机率,
数值最小的机率最大。。我搞不定啊,请大侠教教~~~~~
解决方案 »
- 请教WEBBROWSER如何判断NAVIGATING的是新页面而不是FRAME里的页面?
- 求助 将字符串分解后,赋值给数组
- 如何学习用C#操作EXCEL、Word等软件,是否有相关的API
- word的插件问题The selection is marked as deleted text异常
- 设计关系用户,角色,功能权限表,实现常见系统的授权管理功能
- 急:一个在页面上动态生成WEB控件的问题。
- 求教Splitbutton按钮使用方法
- 最简单的正则问题,提取<title>标题</title>里面的"标题"
- 用C#来控制传真机可以实现吗?
- 数据库备份问题?进来看看,惊喜多多(都给分),多劳多得
- 如何遍历datagrid中一列可编辑文本框的值并将不为0的值写入数据库中?在线等!
- checkBox.DataBindings.add()的绑定值是哪一个
P(a) = a / sum(a) , a是集合中的一个数, sum(A) 求A中元素的和。 P(a)为a的出现概率
这样,大的数有较大的出现概率。
然后,将数组A从小到大排序,概率从大到小排序,依次将概率付给数字。
System.Collections.ArrayList al = new System.Collections.ArrayList();
int total = 0;
foreach(int tmp in numbers)
{
total += tmp;
for(int i=0;i<tmp;i++)
al.Add(tmp);
}
System.Random rd = new Random();
int index = rd.Next(0,total-1);
int randomResult = Convert.ToInt32(al[index]);
根据原始数组重建一个数组,
例如原始数组里有34,那么动态数组al里 “34”就出现34次;
原始数组里再有23,那么动态数组al里 “23”就出现23次;依此类推,最后,从al随机取出一个元素
-----------------------
这样不精确啊。
Eddie005(♂) №.零零伍 (♂) :
-----------------------------
但是如果我里面有个值为100000的数字那岂不是要往新数组添加100000个元素?
static void Main()
{ //为排序方便我使用了链表
List<int> numbers = new List<int>(new int[]{ 34, 23, 353, 324, 32, 113, 44, 22 });
numbers.Sort();//排序
System.Random rd = new Random();
for (int i = 0; i < 100; i++ )//循环取一百次,可以看出各个数字出现的频率
{
Console.Write("{0,5}",numbers[/*下标*/area(rd.Next(0, (numbers.Count - 1) * 2), numbers.Count)]);
}
Console.WriteLine();
Console.ReadLine();
}
//获得链表的下标,0下标站整个随机数区域的一半,1站剩下的一半,2站1剩下的一半,以此类推。
public static int area(int rd, int length)//rd是生成的随机数,//length是链表的大小
{
if (rd > length) return 0;
else
for (int i = length / 2, index = 1; i >= 1; i /= 2, index++)
{
if (rd > i) return index;
}
return length - 1;
}
等更高明的算法ing