吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|pipinga.com

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 1869|回復: 59

[原創工具] 隨機數生成器

[復制鏈接]
樓主
倪沁東 發表于 2020-3-26 22:16 回帖獎勵
本帖最后由 倪沁東 于 2020-3-26 22:20 編輯

隨機數生成器



最近遇到一個有趣的問題,我給大家分享下,希望能夠得到指導。
目的:生成一組隨機數(個數每次不同,可進行選擇,比如20、30。。。。)
要求:已知該組隨機數的平均值,根據已知的平均值、隨機數的波動范圍、隨機數的數量、小數點位數生成一組隨機數。




說明:我感覺上面那個要求已經說清楚了,如果看懂了就不用看這個說明了,我會在說明中再解釋一遍,首先我已知一個平均數,這個平均數是我給定的,而不是實際計算得出的,所以我需要根據這個平均數模擬出一組隨機數,這組隨機數的平均值必須是我給定的那個數;并且在模擬出這組隨機數的時候,我還對隨機數的數量、波動范圍(也就是不能離我的平均數太遠,以免數據太假)、隨機數的小數點位數(2位、3位。。。不過這個位數我認為不是關鍵要求,如果無法做到可以暫時不考慮)




備注:我把這個發出來的原因是我認為我現在想到的這個方法有點笨,想聽一聽大家的想法,希望能夠得到大家的指導,希望大家能夠暢所欲言,大家一起討論下這個問題。






我的思路:
我希望大家不要先看我的思路,以免被我的笨辦法帶偏!
1、平均數已知,數量已知,則該組隨機數的總和為平均數*數量(總和=平均數*數量);
2、首先利用隨機數生成函數按照波動范圍(上下限)生成第一個隨機數,則剩下隨機數之和(余量=總和-隨機數[1]);
3、利用For循環生成(數量減一)個隨機數,同時每生成一個隨機數,則計算一次余量;比如我要得出10個隨機數,則利用For循環生成9個符合要求的隨機數,則最后的余量應該是我的最后一個數據;
4、因為我在生成隨機數時,已經對上下限進行了限制,所以前9個數據肯定是符合我的要求的,但是余量就不一定了,所以我需要對余量進行判斷,判斷最后的余量也就是最后一個數據是否符合我的波動范圍,如果不符合重來,符合則10個數據均滿足我對數據的要求,輸出即可。




可能哪里有表達的不清楚的地方,大家隨意提問!





下載鏈接:
http://www.lanzous.com/iaoglxe
源碼分享:
[C++] 純文本查看 復制代碼
#Region ;**** 參數創建于 ACNWrapper_GUI ****
#PRE_Compile_Both=y
#PRE_Res_requestedExecutionLevel=None
#EndRegion ;**** 參數創建于 ACNWrapper_GUI ****
#include <Date.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>


;~ #include <bug.au3>




#Region ### START Koda GUI section ### Form=e:\au3\project\隨機數生成器\form1.kxf
$Form1_1 = GUICreate("Form1", 453, 172, 192, 124)
$Input1 = GUICtrlCreateInput("-0.5", 63, 72, 73, 21)
$Input2 = GUICtrlCreateInput("0.5", 207, 72, 73, 21)
$Input3 = GUICtrlCreateInput("3", 351, 72, 73, 21)
$Label1 = GUICtrlCreateLabel("下限:", 8, 74, 40, 17)
$Label2 = GUICtrlCreateLabel("上限:", 160, 75, 40, 17)
$Label3 = GUICtrlCreateLabel("小數位:", 295, 75, 52, 17)
;~ $Input4 = GUICtrlCreateInput("", 64, 118, 241, 21)
;~ $Label4 = GUICtrlCreateLabel("隨機數:", 8, 120, 52, 17)
$Button1 = GUICtrlCreateButton("計算", 336, 104, 89, 41)
$Input5 = GUICtrlCreateInput("2", 65, 29, 73, 21)
$Input6 = GUICtrlCreateInput("20", 209, 29, 73, 21)
$Label5 = GUICtrlCreateLabel("平均數:", 10, 31, 52, 17)
$Label6 = GUICtrlCreateLabel("個數:", 162, 32, 40, 17)
$Label7 = GUICtrlCreateLabel("點擊計算按鈕開始吧!", 296, 30, 200, 30)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        _suijishu()
        EndSwitch
WEnd





Func _suijishu()
        

        Local $rand, $yushu
        $yushu = GUICtrlRead($Input5) * GUICtrlRead($Input6)
        Local $num = 0
        While 1
                $num = $num + 1
                GUICtrlSetData($Label7, "正在進行第" & $num & "次嘗試")
                If $yushu < (GUICtrlRead($Input2) + GUICtrlRead($Input5)) Then
                        If $yushu < (GUICtrlRead($Input1) + GUICtrlRead($Input5)) Then
                                $yushu = GUICtrlRead($Input5) * GUICtrlRead($Input6)
                                Local $file = FileOpen("test.txt", 10)
                                For $i = 1 To GUICtrlRead($Input6) - 1
                                        SRandom(StringReplace(_NowTime(), ":", "") + $i)
                                        $rand = Round(Random(GUICtrlRead($Input1) + GUICtrlRead($Input5), GUICtrlRead($Input2) + GUICtrlRead($Input5)), GUICtrlRead($Input3))
                                        FileWriteLine($file, $rand & @CRLF)
                                        $yushu = $yushu - $rand
                                Next
                        Else
                                ExitLoop
                        EndIf
                Else
                        $yushu = GUICtrlRead($Input5) * GUICtrlRead($Input6)
                        Local $file = FileOpen("test.txt", 10)
                        For $i = 1 To GUICtrlRead($Input6) - 1
                                SRandom(StringReplace(_NowTime(), ":", "") + $i)
                                $rand = Round(Random(GUICtrlRead($Input1) + GUICtrlRead($Input5), GUICtrlRead($Input2) + GUICtrlRead($Input5)), GUICtrlRead($Input3))
                                FileWriteLine($file, $rand & @CRLF)
                                $yushu = $yushu - $rand
                        Next
                        
                EndIf
        WEnd
        FileWriteLine($file, $yushu & @CRLF)
        GUICtrlSetData($Label7, "共進行了" & $num & "次嘗試")
;~         MsgBox(0, 0, $yushu)
        FileClose($file)
EndFunc   ;==>_suijishu














隨機數生成器.rar

广西快三897.02 KB, 下載次數: 16, 下載積分: 吾愛幣 -2 CB

免費評分

參與人數 2吾愛幣 +8 熱心值 +2 收起 理由
風之暇想 + 7 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
yixiqiao + 1 + 1 熱心回復!

查看全部評分

發帖前要善用論壇搜索广西快三功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
 樓主| 倪沁東 發表于 2020-3-29 11:04 <
男生1111 發表于 2020-3-27 14:39
其實這個MATLAB也能實現,不過將數據生成散點圖就會發現數據看起來還是很假

您提到的這個問題,那天我想了一下,最后忘了回復您了,數據可能有點假,但是其實好像還可以,這個軟件是應一個網友的要求寫的,這個要求呢是我根據他的描述總結出來的,因為限制條件很簡單,所以生成的數據可能也很有規律性,但是這個問題不是不能解決;
我對您【假】這個詞的理解就是上面那樣的,我的解決方案是是這樣的:
首先用軟件生成一組隨機數,生成隨機數之后,手動根據均值不變的原則進行調整,被調整的這幾個數據可能超出波動范圍,也就是我們說的【飛點】或者說【異常數據】,目前的話我的水平做不到這么的智能化,所以之后后期再手動進行一部分的調整,其實工具只是個工具,她是計算機軟件,是很嚴謹的,可是實際的數據并沒有那么的嚴謹,他并不會說是每一組數據都很好,所以一般情況下都會存在我說的【飛點】或者【異常數據】,不過這些異常數據的存在又都是合理的,因為實際的觀測過程中總存在一定的誤差,不管是人為的觀測誤差,還是由于設備本身的不穩定性導致的誤差【非系統誤差】,這樣的數據可以通過對以往觀測數據的總結,對生成的數據進行相應的改動。
舉個例子:我每天觀測10組數據,這10組數據中的9組可能都是在我的的波動范圍之內的,總有一組跳出了我的波動范圍,那我在利用軟件生成數據的時候,我就手動進行調整,將某兩組數據根據【均值不變】的原則進行調大或者調小,這樣數據可能看起來就比較真實了。具體怎么用就得靠經驗了
推薦
 樓主| 倪沁東 發表于 2020-3-29 10:51 <
本帖最后由 倪沁東 于 2020-3-29 10:52 編輯
kezzyhu 發表于 2020-3-29 08:37
不知道樓主計算這個做說明用的,但問題倒也蠻有趣。
樓主的算法是到最后一個數字生成才判斷這組隨機數無效 ...

一件一件說啊
1、報毒確實存在,只是一個小工具,沒用必要冒風險去試了,我就是為了聽聽大家的思路;
2、您提的建議,我理解為每生成一個隨機數就進行一次判斷,如果是這個意思的話,那您就沒理解我思路中的這句話【4、因為我在生成隨機數時,已經對上下限進行了限制,所以前9個數據肯定是符合我的要求的,但是余量就不一定了】,因為在生成隨機數的時候我已經其進行控制了,所以生成的隨機數肯定是符合要求的,最后也只對最后一個數據進行判斷,而不是對這組數據進行判斷;
3、您的這句話,我沒太讀懂【你的例子 20個隨機數,平均值為2。和為40,上下限-0.5~0.5。最大和0.5*20=10,好像波動范圍不夠哦】,我按上面的要求直接舉幾個數據:2.5、2.4、1.5、1.6,平均值為2,上下限為-0.5~0.5,則數據中的最大值為2+0.5=2.5,最小值為2-0.5=1.5,這樣您看清楚了嗎?至于您提到的這個最大和的概念,我沒能看懂,可能是我的表達存在問題,導致您沒有理解我的意思吧,有興趣的話,要不麻煩您再讀一遍。
沙發
yixiqiao 發表于 2020-3-26 22:44
3#
 樓主| 倪沁東 發表于 2020-3-26 22:47 <

能滿足你要求嗎?

免費評分

參與人數 1吾愛幣 +3 熱心值 +1 收起 理由
yixiqiao + 3 + 1 大神收我一拜

查看全部評分

4#
yixiqiao 發表于 2020-3-26 23:04
倪沁東 發表于 2020-3-26 22:47
能滿足你要求嗎?

這么多代碼  你辛苦了
5#
yixiqiao 發表于 2020-3-26 23:10
試了一下  完全滿足要求
6#
ckypamym119 發表于 2020-3-26 23:15
C++嗎!!!
7#
yixiqiao 發表于 2020-3-26 23:15
最大支持16位小數  你也太強了吧  我還說四五位都滿足要求了   太感謝你了
8#
硅谷神奇 發表于 2020-3-26 23:35
用EXCEL里面的函數公式可以實現,哪有樓主這么麻煩。
9#
yixiqiao 發表于 2020-3-26 23:38
硅谷神奇 發表于 2020-3-26 23:35
用EXCEL里面的函數公式可以實現,哪有樓主這么麻煩。

這個確實比excel好用多了  不知道excel怎么寫
10#
 樓主| 倪沁東 發表于 2020-3-26 23:46 <

不是C++寫的,用的是AU3寫的,一個腳本語言
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 提醒:禁止復制他人回復等『惡意灌水』行為,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-4-1 00:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表