[英]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.