- 註冊時間
- 2006-2-9
- 最後登錄
- 2019-10-8
- 主題
- 查看
- 積分
- 4865
- 閱讀權限
- 250
- 文章
- 846
- 相冊
- 0
- 日誌
- 8
狀態︰
離線
|
原帖由 cps 於 2009-5-6 12:13 發表
請寫一個java程式設計.模擬大樂透開獎,由1~49個號碼中開出六個合一個特別號作為頭獎.然後在模擬民眾買樂透,
假設每次買100元兩張,每星期買兩次,試試看大慨要多少年才會中一次頭獎 ...
以下是從網路上找到的,你參考一下吧!
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="14">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
/*
題目敘述:
請使用 MATH 或 RANDOM 類別所提供的亂數函數及陣列來設計一模擬樂透彩開獎的程式
程式執行後會產生 6 個號碼以及 1 個特別號
1.每次執行程式皆會亂數產生 6 個號碼及 1 個特別號
2.號碼之間不可重複出現
3.所有號碼介於 01 ~ 42 之間
4.個位數號碼顯示時請漁號碼前加入 "0" 例如 7 要顯示 07
評分項目
每次執行程式皆會亂數產生 6 個號碼及 1 個特別號 - 4
號碼之間不可重複出現 - 4
所有號碼介於 01 ~ 42 之間 - 4
個位數號碼顯示時請於號碼前加入 "0" 如 7 要顯示 07 - 3
總分 15
Author: 山羊
URL: <a onclick="pageTracker._trackPageview ('/outgoing/http_gjo4rul4_blogspot_com');" href="http://gjo4rul4.這個網址已被系統封鎖" target="_blank">http://gjo4rul4.這個網址已被系統封鎖</a>
by Author :
這個實作的程式 我寫了兩個方法
通常一般寫程式的初學者應該會用方法2
先取出亂數並且判斷陣列中是否重複
雖然這個範例中差異並不會很大
但是如果在 1000 個亂數中要取出 800 個 (或更大的數字)
兩者的效能就會以方法一較有效率
方法1 -> 1000次寫入陣列 800次產生亂數
方法2 -> 800次寫入陣列 800次(以上)產生亂數
*/
//方法1
private function clickHandler1():void{
//清空印出區域
this.printOutArea.text = "";
//建立集合物件
var arc:ArrayCollection = new ArrayCollection();
//執行 42 次的迴圈 >> 將 42 個數字依序塞入集合物件
for(var i:int=1;i<=42;i++){
//如果 數字 小於 10 的話必須在 數字前面加上 0
if(i<10){
//將數字 "塞入" 集合物件
arc.addItem("0"+i);
}else{
//將數字 "塞入" 集合物件
arc.addItem(i);
}
}
//用亂數取出 6 個號碼
//執行 6 次迴圈
for(var j:int=0;j<6;j++){
//先取出 亂數*集合物件的長度
var number:int = Math.floor(Math.random()*arc.length);
//將集合物件的第 x 個物件取出並印在打印區 x 代表剛剛取出的亂數 ( 但不會超過集合物件的長度 )
this.printOutArea.text = this.printOutArea.text + "第 " + (j+1) + " 個號碼 : "+ arc.getItemAt(number) + "\n";
//將抽到的號碼從集合物件移除
arc.removeItemAt(number);
}
//再抽出最後一個號碼 為特別號 , 這個就不用再移除物件了 因為已經結束了
this.printOutArea.text = this.printOutArea.text + "特別號 : "+ arc.getItemAt(Math.floor(Math.random()*arc.length)) + "\n";
}
//方法2
private function clickHandler2():void{
//清空印出區域
this.printOutArea.text = "";
//建立陣列
var array:Array = new Array();
//陣列必須要有 7 個數字才停止運算
while(array.length < 7){
//建立亂數 1~42 中取 1
var number:int = Math.floor(Math.random()*42)+1;
//數字是否重覆旗標
var hasNumber:Boolean = false;
//逐次比對陣列內所有的數字
for(var i:int=0;i<array.length;i++){
//如果發現陣列已經有得到的亂數就把重複旗標設定為 true
if(number == array){
hasNumber = true;
}
}
//如果沒有發現重複的數值 塞入亂數
if(!hasNumber){
array.push(number);
}
}
//取出依序取出前六個號碼
for(var j:int=1;j<=6;j++){
//如果小於 10 就在 數字前面 + 上 0
if(array[j-1]<10){
this.printOutArea.text = this.printOutArea.text + "第 " + j + " 個號碼 : "+ "0"+array[j-1] + "\n";
}else{
this.printOutArea.text = this.printOutArea.text + "第 " + j + " 個號碼 : "+ array[j-1] + "\n";
}
}
//取出特別號
//如果小於 10 就在 數字前面 + 上 0
if(array[6]<10){
this.printOutArea.text = this.printOutArea.text + "特別號 : "+ "0"+array[6] + "\n";
}else{
this.printOutArea.text = this.printOutArea.text + "特別號 : "+ array[6] + "\n";
}
}
]]>
</mx:Script>
<!--建立三個 FLEX 物件-->
<mx:Text text="JAVA 實力評量 JVD01 使用 FLEX 實作 

模擬樂透彩 (易)

程式執行號產生六個號碼以及一個特別號"/>
<mx:TextArea width="800" height="400" id="printOutArea"/>
<mx:Button label="執行 方法 1" click="clickHandler1()"/>
<mx:Button label="執行 方法 2" click="clickHandler2()"/>
</mx:Application> |
|