簡體   English   中英

給定固定長度的int數組,找到最小的數字,然后相加並返回剩余數字的總和

[英]Given a fixed length int array, find the lowest number, and then add and return the sum of the remaining numbers

這不是功課。 我正在設計一個RPG,對於能力得分,我滾動4d6,刪除最低的滾動,然后將剩余的總和相加。 下面是我所擁有的,我只是想知道是否還有其他更好的建議。 為簡便起見,我刪除了滾動動作,只插入了四個整數。

int[] rolls = { 6, 3, 2, 5 };
int abilityScore = rolls[0] + rolls[1] + rolls[2] + rolls[3];
int low = rolls[0];

for (int i = 1; i < rolls.length; i++)
{
    if (rolls[i] < low)
    {
        low = rolls[i];
    }
}

return abilityScore -= low;

我會這樣做-不需要數組並在循環內計算總和:

int get_total_without_lowest_roll(int roll_count) {
  int abilityScore = 0;
  int low = MAX_INTEGER;
  int roll;
  for (int i = 0; i < roll_count; i++)
  {
    roll = roll_dice(); // Roll your dice here
    if (roll < low)
    {
        low = roll;     
    } // By the way, good alternative would be low = min(low,roll);
    abilityScore += roll;
  }

  return (abilityScore - low);
}

您可以按照此處的說明使用Java的排序機制

排序后,然后刪除最低的元素,並將其余的數組加在一起。

int[] rolls = { 6, 3, 2, 5 };
int abilityScore = 0
int low = MAX_INTEGER;

for (int i = 1; i < rolls.length; i++)
{    
    total+=rolls[i];
    if (rolls[i] < low)    
        low = rolls[i];

}

return abilityScore -= low;

差別不大,但競爭激烈

這是我刪除最低卷的解決方案:

    static void removeLowest(ref List<int> rolls)
    {
        int lowest = 0;
        for (int i = 1; i < rolls.Count; i++)
            if (rolls[i] < rolls[lowest])
                lowest = i;
        rolls.RemoveAt(lowest);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM