close

大樂透接近真實版有幾個邏輯步驟

 

1.有兩盒箱子裡面裝1~49號球

2.丟到大的箱子禮用吹風攪亂

3.攪阿攪的,直到想要抽出一個號碼球

4.這樣抽出六顆球後再取出特別號

 

 

分析完後就開始想要如何實現


1.弄兩個陣列,都是塞1~49號,沒意外肯定是int整數陣列,用for迴圈去塞數值,一個陣列給特別號用

2.另外準備兩個大型陣列,假設是1000陣列,這樣才夠大,球才可以丟進去嘛

3.弄個迴圈,利用亂數找出兩個不重複位置,然後讓這兩個位置交換,模擬出吹風混亂的感覺,讓他交換個一萬次,或者十萬次
  讓他越亂越真實

4.一個個取出來,最接近出口的取出來好了,假設出口在最前面好了

5.再去抽出特別號

大概就是這樣的邏輯去做吧
然後分析完每個步驟後,再想辦法去實現每一個階段
每實現一個階段就去測看看是不是實現了
這樣就會是完整程式啦
 


public class lottery_2 {
    public static void shuffle(int target[]){//洗球程式 
        int chaosTimes=1;//混亂
        
        java.util.Random randomInt =new java.util.Random();//宣告亂數
        
        while(chaosTimes<=100000){//用while是因為考慮之後改寫用中斷法可以直接使用
            int temp1,temp2,temp3;
            
            do{
                temp1=randomInt.nextInt(1000);
                temp2=randomInt.nextInt(1000);                
            }while(temp1==temp2);//如果想換的位置撞到
           
            temp3=target[temp2];
            target[temp2]=target[temp1];
            target[temp1]=temp3;
            
            chaosTimes++;
        }
    }
    public static void main(String[] arge){
        
        String result="";//印答案
        String result2="";//印排序後答案
        int lottery[]=new int [6];//樂透六個號碼
        int special;//特別號
        boolean flagRepeat;//驗證是否重複的旗標
        int x=0;//準備接隨機號
        
        int lotteryBalls[]=new int [49];//樂透49個球
        int lotteryBallsSpecial[]=new int [49];//樂透49個球特別號用
        int lotteryBox[]=new int [1000];//樂透箱子 假設可以裝一千個球
        int lotteryBoxSpecial[]=new int [1000];//樂透箱子特別號
        
        for(int i=0;i<lotteryBalls.length;i++){//球都是49號碼 偷懶就放同回圈
            lotteryBalls[i]=i+1;
            lotteryBallsSpecial[i]=i+1;
        }
        
        java.util.Random randomInt =new java.util.Random();//宣告亂數
        
        for(int i=0;i<lotteryBalls.length;i++){//球都是49號碼 丟球進盒子
            
            int temp=0;
            do{
                temp=randomInt.nextInt(1000);//
            }while(lotteryBox[temp]!=0);
            
            lotteryBox[temp]=lotteryBalls[i];//球丟進盒子 
            
            do{
                temp=randomInt.nextInt(1000);
            }while(lotteryBoxSpecial[temp]!=0);
            
            lotteryBoxSpecial[temp]=lotteryBallsSpecial[i];//特別號的球丟進盒子
        }
        
        shuffle(lotteryBox);//洗球囉
        shuffle(lotteryBoxSpecial);//洗球囉 特別號的箱子
        
        for(int i=0;i<lottery.length;i++){//取球囉 直接取最前面的球
            int j=0;
            while(lotteryBox[j]==0){//0代表沒球 直到找到非0的球
                j++;
            }
            lottery[i]=lotteryBox[j];//抽到開獎裡
            lotteryBox[j]=0;//號碼抽出來了 所以把他放成0
            shuffle(lotteryBox);//再洗球 
        }
        
        special=randomInt.nextInt(48)+1;//開特別號
        shuffle(lotteryBoxSpecial);//多洗一次特別號
        
        for(int i=0;i<lotteryBoxSpecial.length;i++){
            if(lotteryBoxSpecial[i]!=0){
                special=lotteryBoxSpecial[i];//開出最前面的球道特別號
                break;
            }
        }
        
        
    result+="開獎(未排序):\t";
    for(int i:lottery){
            result+=i+"\t";
        }
        System.out.println(result+"特別號:\t"+special);
        
        result2+="開獎(未排序):\t";
        for(int i=0;i<lottery.length-1;i++){
            for(int j=i+1;j<lottery.length;j++){
                if(lottery[i]>lottery[j]){
                    int temp;
                    temp=lottery[i];
                    lottery[i]=lottery[j];
                    lottery[j]=temp;
                }
            }
        }
        for(int i:lottery){
            result2+=i+"\t";
        }
        System.out.println(result2+"特別號:\t"+special);
    }
}
 

arrow
arrow
    文章標籤
    Java
    全站熱搜
    創作者介紹
    創作者 蒼木浩界 的頭像
    蒼木浩界

    蒼木浩界之家

    蒼木浩界 發表在 痞客邦 留言(0) 人氣()