1

我正在用 C# 编写一份报告,其中给了我一个部门打印的总数量,我必须根据 3 月 1 日打印出 10 份论文的月份日期分发它们,依此类推到 3 月 31 日。

我有一个表格,其中包含总打印输出计数。我有一个月份选择器。

从 Month 我得到总天数,这是要生成的总数,例如:30 或 31 或 28

设想 :

2000 年 3 月打印输出当月总和:2000 要生成的数字:31

这是我的代码

        int sum = 2345;
        int nums = 23;
        Random rand = new Random();
        int newNum = 0;
        int[] ar = new int[23];
        for (int i = 0; i < nums; i++)
        {
            newNum = rand.Next(0, sum);
            ar[i] = newNum;
            sum = sum - newNum;
        }
        for (int i = 0; i < 23 ; i++)
        {
            Console.WriteLine(ar[i]);

        }
        Console.ReadLine();

发生的事情是在结尾数字中它变为零。我希望像一个索引一样正常分布,它首先存储最大值,最后它减小。

我们安装了第三方理光打印/复印机,第三方向我们收取一定金额的账单,他们计算出我们部门已经打印了 3000 份打印件,因此我们必须在几天内随机分发它们,打印出报告并从我们的部门负责人。

部门的人在excel上做这件事,我给他们提供了一个解决方案。Windows 窗体应用程序已构建,我只需要把这个逻辑就是这样。谢谢您的反馈

4

3 回答 3

4

您可以使用分区轻松完成此操作。对于产生 10 件事情的 4 天月:生成 3 个介于 0 和 10(含)之间的随机数。对它们进行排序并将 10 附加到数字列表中。所以我们也许有:

3 6 6 10

哪个分区我们的打印:

p p p | p p p | | p p p p
于 2013-06-12T03:47:20.847 回答
1

如果你想有 23 个随机数,总和为 2345,你可以使用这个代码:

        int sum = 2345;
        int nums = 23;
        int max = sum / nums;
        Random rand = new Random();
        int newNum = 0;
        int[] ar = new int[23];
        for (int i = 0; i < nums-1; i++) {
            newNum = rand.Next(max);
            ar[i] = newNum;
            sum-= newNum;
            max = sum / (nums-i-1);
        }
        ar[nums - 1] = sum;

它会给你:

在此处输入图像描述

于 2013-06-12T03:45:12.703 回答
0

这是我生成 30 个具有特定总和的随机数的想法:

int sum = 3000;
int size = 30; // assumes that (sum % size == 0)
int[] result = new int[size];
Random rand = new Random();
int x = sum / size;

for (int i = 0; i < size; i++)
{
    result[i] = x;
}

for (int i = 0; i < x; i++)
{
    var a = rand.Next(size - 1); // not sure if parameter is inclusive?
    var b = rand.Next(size - 1); // should return number between 0 and size-1 inclusively

    result[a]++;
    result[b]--;
}

int testSum = result.Sum(); // will equal "sum" (3000)

不过, Lee Daniel Crocker 与相关联,我认为这是一个更好的解决方案。非常整洁和直观。

于 2013-06-12T04:00:39.323 回答