数组和随机数:计算随机生成整数的次数

时间:2012-09-14 04:03:45

标签: c#

  

可能重复:
  Count Frequency in a Randomly Generated List of Numbers

我目前正在处理数组和随机数。我有一个创建的表单,让我生成1到20的随机数字,用文本框1来选择显示的数字数量。我在多行文本框2中显示结果。我已经能够计算生成的数字集的总和和平均值。

我的第二步:

是否存在计数或标记生成数字的时间并将其显示在多行文本框中(最后一张图片)?我是否需要创建一个数组并将其设为零?

private void button1_Click(object sender, EventArgs e)
{
    int n = Convert.ToInt32(textBox1.Text);
    int[] y = new int[n];
    double sum = 0;

    for (int i = 0; i < n; i++)
    {
        int x = 1 + r.Next(20);
        y[i] = x;
        sum += x;

        if (n < 101)
            textBox2.AppendText(x + " ");
    }

    double avg = sum / n;
    textBox2.AppendText(Environment.NewLine + sum + " " + avg + Environment.NewLine);

    double vsum = 0;

    for (int i = 0; i < n; i++)
        vsum += (y[i] - avg) * (y[i] - avg);
}     

Form.cs

enter image description here

计算随机选择整数的次数

enter image description here

4 个答案:

答案 0 :(得分:3)

  

“我是否需要创建一个数组并使其充满零?”

是的,这将是一个良好的开端。

拥有一系列计数器(最初都为零)并计算出现时每个数字的出现次数。

答案 1 :(得分:2)

这是可以做你想做的代码:

        var r = new Random();
        var n = int.Parse(this.textBox1.Text);

        var y =
            Enumerable
                .Range(0, n)
                .Select(x => r.Next(20) + 1)
                .ToArray();

        var sum = y.Sum();
        var avg = (double)sum / (double)n;
        var frequency = y.ToLookup(x => x);

        textBox2.Text = String.Join(Environment.NewLine, new[]
        {
            "Results",
            String.Format("{0} {1}", sum, avg),
        }.Concat(Enumerable
            .Range(1, 20)
            .Select(x => String.Format("{0} ({1}x)", x, frequency[x].Count()))));

运行此值为25我得到了这个结果:

Results
278 11.12
1 (0x)
2 (2x)
3 (1x)
4 (1x)
5 (1x)
6 (2x)
7 (0x)
8 (1x)
9 (2x)
10 (4x)
11 (1x)
12 (0x)
13 (0x)
14 (0x)
15 (2x)
16 (1x)
17 (2x)
18 (2x)
19 (3x)
20 (0x)

这就是你要追求的吗?

答案 2 :(得分:0)

您可以添加重要的Dictionary<int, int> counter。在int x = ...

之后插入这些行
if (counter.ContainsKey(x))
    counter[x]++;
else
    counter.Add(x, 1);

之后,字典为您创建的每个不同随机数及其创建时间保留一个键值对。您也可以使用字典完全替换y数组。

答案 3 :(得分:0)

你也可以做一个

Dictionary<int,int>

将有问题的数字存储为关键字(第一个int) 存储作为值生成的次数(第二个int)。

Dictionary<int,int> numbers = new Dictionary<int,int>();
//initialize dictionary
for (int i = 1; i < 21; i++)
{
   numbers.Add(i,0);
}

//this only covers generating number and adding to dictionary
Random random = new Random();
int nextNum = random.NextInt(1,20);
numbers[nextNum]++;

参考文献:

http://www.dotnetperls.com/keyvaluepair

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx