基本的には、ベクトルが1 1 1であればモードを返さないなど、ベクトル内のモードを探しています。また、2つ以上のモードについて心配しないで、最高2つの可能なモードを読むことができる必要があります。どんな提案も非常に役に立ちます。 また、void calcModeはその一部です。コードに追加することはできません。変更方法はわかりません。複数のモードをベクトルに読み込み、それを印刷しようとしています。C++
void calcMode(vector <double> const& vec)
{
int counter = 1;
int max = 0;
vector<double> mode;
for (int pass = 0; pass < vec.size() - 1; pass++)
{
if (vec[pass] == vec[pass + 1])
{
counter++;
// If they are the same number add it to the mode vector
if (counter > max)
{
mode.clear();
max = counter;
mode.push_back(vec[pass]);
}
// if it is greater clear the vector and assign it the new value
else if (counter == max)
{
mode.push_back(vec[pass]);
}
}
else
counter = 1; // reset counter.
}
// print out the freq and the mode(s)
cout << mode.size() << endl;
cout << "Mode: " << setw(25) << setprecision(3);
cout << setw(25) << setprecision(3);
if (vec.size() == 1)
{
cout << "Freq = " << counter << endl;
cout << vec[0] << endl;
}
else if (vec.size() == 2)
{
cout << "Freq = " << counter << endl;
cout << vec[0] << vec[1] << endl;
}
else
cout << "No mode" << endl;
}
クイックハック: 'のstd ::マップ FREQ;'あなたは 'FREQ [VEC [インデックス]]は++ができ、この小さな美しさ;'周波数を取得します'ベクトル '中の全ての要素の数。次に、最も高い(または2つの最も高い)カウントを探して 'freq'を歩いてください。関数は5-6行のコードで実行されます。 –
user4581301
それ以外の場合は、1つの問題を選択し、その問題に焦点を当てます。さもなければ、あなたは票を集め、近い票を集め、断片化された回答を集めるつもりです。それのどれもあなたの時間の価値がありません。 – user4581301
返信いただきありがとうございます、あなたのメソッドを試しましたが、最高の値を数えますが、どのように表示するのですか? 20 20 10 11のようにfreqは2になりますが、20をどのように出力するのですか? –