簡體   English   中英

根據給定的總和生成30個隨機數

[英]Generate 30 Random Numbers from a given sum

我正在使用C#編寫一份報告,該報告中提供了部門打印的總數,我必須根據3月1日打印出紙張的月份(截至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窗體應用程序已構建,我僅需輸入所有這些邏輯即可。.感謝您的反饋

您可以使用分區輕松地做到這一點。 對於一個產生10件東西的4天月份:生成3個介於0和10(含)之間的隨機數。 對它們進行排序,然后將10附加到數字列表中。 因此,我們也許有:

3 6 6 10

哪個分區我們的印刷品:

p p p | p p p | | p p p p

如果您想要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;

它會給你:

在此處輸入圖片說明

這是我產生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)與此相關 ,我認為這是一個更好的解決方案。 非常簡潔直觀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM