![]()  | 
		
			
  | 	
	
	
		
		|||||||
| 論壇說明 | 
| 
				歡迎您來到『史萊姆論壇』  ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』  | 
		
| 
         | 
    主題工具 | 顯示模式 | 
| 
			
			 | 
		#1 | 
| 
			
			 管理版主 
			![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()  | 
	
	
	
		
		
			
			 最近發生財政部電腦抽獎之微乎其微重複領獎事件 
		
		
		
		
			就想到 如果不是作弊、後門 甚麼的話 就是亂數函式寫得太爛 一般來講每一種程式語言都有提供簡單的單一指令 亂數函式 大部分雖說是以時間來當種子成員 但每次跑 相似度其實都很近 原因如何? 可能是除了 時間因子外,還有其他參考因子 差異性不大的關係 也就是只要你是同一部機器去跑 最差的情況就是 相似度極高 又如果 電腦抽獎的軟體是以呼叫 獨立的亂數外掛去運行 那就可能發生 重複中獎的情況 那理想的亂數該如何寫呢? 除了多加混和各式的參考因子外 個人覺得應該要用 100%列表法 也就是 1. 先讓軟體跑出一份所有參賽者都至少中獎過一次的序位清單 2. 再把參賽者重複的部分清除 3. 之後再打亂清單 4. 最後再用此清單跑亂數抽出得獎者 如果要避免重複,可以每抽出一位就把序位清單那位抽離 當然也可用比對方式避免重複 甚至抽離後再打亂一次 方法很多 這種方法主要的特性就在於 兼顧人人有中獎的機會 且對不懂程式的人有個易懂的交代 ================================ 有人會說那不如一開始就爭對名冊跑亂數打亂 再 2 > 3 > 4 當然也是可以的 只是要知道 亂數就是一種 你跑越久就會越亂的設計 如果 做一次 1,絕對會得到比此種方式還亂的結果 越偷懶跑出來的結果會越相似 此帖於 2024-11-06 05:09 PM 被 mini 編輯.  | 
| 
		 | 
	
	
	
		
	
	 
		送花文章: 2058,
		
			
		 
	
 
	
		
	
				 
		
		
		
		
		
		
			
		
		
		
		
		
			
					
						
					
			
		
		
		
		
		
			
				
			
		
		
		
	 | 
| 
向 mini 送花的會員:
 |