繁体   English   中英

最大值和数组中的出现次数

[英]Maximum value and the number of occurrences in an array

我在基本程序中遇到有关数组最大值及其出现次数的问题。 我不知道程序是如何编译的。 我已经在纸上进行了测试,并且(在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;
}

首先,应检查n是否小于50。还应在单个语句周围添加括号,以免出现错误。

您还有一个问题,因为应将count设置为1 ,而不是0 ,并且仅当遇到相同的数字时才应将其增加。

C ++方式: max = *std::max_element(v, v+n); count = std::count(v, v+n, max);

在第二个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;
}
#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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM