分享一道自創面試題

問題描述:算法

策劃想要設計一種怪物,它有m種攻擊方式,每種攻擊方式都有其特定的使用權重N(i),其中N(i)爲正整數,i爲1到m的正整數,表明攻擊方式序號。當怪物遇到敵人時,將按照權重指示隨機的從m種攻擊方式選取一種進行攻擊,該次攻擊完畢後以相同方式再次選取新的攻擊方式,並繼續攻擊敵人,直到戰鬥結束。spa

遊戲設計者但願以下: 權重爲1的攻擊方式,最多連續使用1次。權重爲2的攻擊方式最多連續選取2次,以此類推,權重爲n的攻擊方式最多連續使用n次。設計

那麼假設如今怪物進入了一場曠日持久的大戰,該算法還須要確保權重爲N(i)的攻擊方式出現頻率爲 \frac{N(i)}{\sum_{i=1}^{m}{N(i)}}code

 

舉例說明,假設該怪物有3種攻擊方式,使用權重分別爲1,2,3。 那麼權重爲1的攻擊方式,不得連續使用,權重爲2的攻擊方式,最多隻能連續使用2次。。。且要保證攻擊屢次後,採用權重爲1的攻擊方式機率爲 \frac{1}{1+2+3} ,採用權重爲2的攻擊方式機率 \frac{2}{1+2+3} 。。。blog

只有兩個要求,固然算法可讀性越高越好(最好是不管童叟都能看懂你在寫什麼),代碼量越少越好。遊戲

 

假設已經有SkillData類,包含了SkillData的數據。class

struct SkillData

{

   int skill_id;

   int skill_weight;

}

但須要設計一個類SkillSelector,用來實現上述邏輯。List

public class SkillSelector

{

    private List<SkillData> skill_list;

    SkillSelector(List<SkillData> data)

    {

        skill_list = new List<SkillData>(data.ToArray());

    }

    int GetNextSkillID()

    {

    //這個方法每次調用返回新的skill id,確保實現上述邏輯

    //TODO:.....

    }

}
相關文章
相關標籤/搜索