1. ホーム
  2. c++

[解決済み] ベクターに格納された値の中央値を計算する - C++?

2022-02-09 20:47:01

質問

私はプログラミングを勉強している学生で、今取り組んでいるプロジェクトでは、int値のベクトルの中央値を計算する必要があります。STL の sort 関数と、次のようなベクトル・メンバー関数だけを使って計算することになっています。 .begin() , .end() および .size() .

また、ベクトルが奇数の値でも偶数の値でも中央値を求めるようにしています。

そして、私は 詰まっている 以下に、私の試みを掲載します。では、私はどこで間違っているのでしょうか?正しい方向へ進むためのヒントやリソースを教えていただけると幸いです。

コード

int CalcMHWScore(const vector<int>& hWScores)
{
     const int DIVISOR = 2;
     double median;
     sort(hWScores.begin(), hWScores.end());
     if ((hWScores.size() % DIVISOR) == 0)
     {
         median = ((hWScores.begin() + hWScores.size()) + (hWScores.begin() + (hWScores.size() + 1))) / DIVISOR);
     }
     else 
     {
       median = ((hWScores.begin() + hWScores.size()) / DIVISOR)
     }

    return median;
}

解決方法は?

余計な除算をして、全体的に必要以上に複雑になっていますね。また、実際には2の方が文脈上意味があるのに、DIVISORを作成する必要はありません。

double CalcMHWScore(vector<int> scores)
{
  size_t size = scores.size();

  if (size == 0)
  {
    return 0;  // Undefined, really.
  }
  else
  {
    sort(scores.begin(), scores.end());
    if (size % 2 == 0)
    {
      return (scores[size / 2 - 1] + scores[size / 2]) / 2;
    }
    else 
    {
      return scores[size / 2];
    }
  }
}