Максимальное значение и количество вхождений в массиве - PullRequest
0 голосов
/ 13 октября 2018

У меня возникают проблемы в базовой программе по поводу максимального значения массива и его количества вхождений.Я не понимаю, как программа компилируется.Я проверил его на бумаге и (скомпилирован в Visual Studio), если я даю не более десяти значений, он работает нормально, но если я превышаю десять чисел в массиве, счетчик ведет себя сумасшедшим образом.

Воткод.

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int n, i, v[50], max, count = 0;
    cout << "Number of elements = "; cin >> n;
    for (i = 0; i < n; i++) {
        cout << "v[" << i << "]=";
        cin >> v[i];
    }

    max = v[0];
    for (i = 0; i < n; i++)     
        if (max < v[i]) {
            max = v[i];
            count = 0;
        }
        else 
            ++count;
    cout << endl;
    cout << "Maximum value, " << max << ", occurs " << count << " times.";
    cout << endl;
    system("pause");
    return 0;
}

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Во втором цикле for вы проверяете, больше ли текущий элемент в массиве, чем текущий самый большой;если это правда, вы делаете новый максимум текущим элементом и устанавливаете count в 0 - вы должны фактически установить его в 1. Если он не больше, вы увеличиваете счетчик - это еще одна проблема.Если текущее число меньше максимального и не равно ему, вам не следует вводить переменную count, но именно это делает ваш код.

Вот простое исправление, которое должно работать:

int main()
{
    int n, i, v[50], max, count = 0;
    cout << "Number of elements = "; cin >> n;
    for (i = 0; i < n; i++) {
        cout << "v[" << i << "]=";
        cin >> v[i];
    }

    max = v[0];
    for (i = 0; i < n; i++)     
        if (max < v[i]) {
            max = v[i];
            count = 1;
        }
        else if(max == v[i])
            ++count;
    cout << endl;
    cout << "Maximum value, " << max << ", occurs " << count << " times.";
    cout << endl;
    system("pause");
    return 0;
}
0 голосов
/ 13 октября 2018
#include "stdafx.h"

#include <iostream>
#include <map>

using namespace std;

int main()
{
    int n, i, v[50], max, count = 0;
    cout << "Number of elements = "; cin >> n;
    for (i = 0; i < n; i++) {
        cout << "v[" << i << "]=";
        cin >> v[i];
    }

    map<int, int> m;
    for (int i = 0; i < n; ++m[v[i++]]);

    if (!m.empty())
    {
        const pair<int, int> p = *m.rbegin();

        cout << endl;
        cout << "Maximum value, " << p.first 
             << ", occurs " << p.second << " times.";
        cout << endl;
    }

    system("pause");
    return 0;
}
0 голосов
/ 13 октября 2018

Во-первых, вы должны проверить, что n меньше 50. Вы также должны добавить скобки вокруг отдельных операторов, чтобы избежать ошибок.

У вас также есть проблема, поскольку count должно быть установлено на 1, а не 0, и вы должны увеличивать его только в том случае, если встречаете одно и то же число.

Способ C ++: max = *std::max_element(v, v+n); и count = std::count(v, v+n, max);.

...