我想计算数组中的最大连续值。在下面,它返回我4.似乎阵列中的所有真理都加起来了。我的工作有什么问题?这是我的代码。
int main()
{
int maxCount = 0;
bool list[7];
list[0] = true;
list[1] = true;
list[2] = false;
list[3] = false;
list[4] = true;
list[5] = true;
list[6] = false;
for (int i = 0; i < 6; i++)
{
int count = 0;
if (list[i]==true)
{
count++;
for (int j = i + 1; j < 7; j++)
{
if (list[j]== list[i])
{
count++;
}
}
}
if (count > maxCount)
{
maxCount = count;
}
}
cout << maxCount << endl;
}
答案 0 :(得分:1)
您实施的方式完全错误。您正在添加数组中的所有true
条目,而不考虑它们之间的false
。
这样做:
int currentCount = 0, maxCount = 0;
for (int i = 0; i < 7; ++i)
{
// arr is the name of the array
if(arr[i]) ++currentCount;
else currentCount = 0; // resetting to zero if false encountered
maxCount = ( (currentCount > maxCount) ? currentCount : maxCount );
}
cout << maxCount << endl;
答案 1 :(得分:0)
最好再次考虑count
和maxCount
之间的关系。
int maxCount = 0;
int count = 0;
int size = sizeof(list) / sizeof(bool);
for (int i = 0; i < size; i++) {
if (list[i]==true) {
count++;
} else {
if (count > maxCount) {
maxCount = count;
}
count = 0;
}
}
if (count > maxCount) {
maxCount = count;
}
cout << maxCount << endl;
答案 2 :(得分:0)
打破真/假的变化并小心最后的真实
#include <iostream>
int main()
{
using namespace std;
int maxCount = 0;
bool list[7];
list[0] = true;
list[1] = true;
list[2] = false;
list[3] = false;
list[4] = true;
list[5] = true;
list[6] = false;
for (int i = 0; i < 7; i++) // be careful last true
{
int count = 0;
if (list[i]==true)
{
count++;
for (int j = i + 1; j < 7; j++)
{
if (list[j]== list[i])
{
count++;
}
else
{
break; // true / false transition
}
}
}
if (count > maxCount)
{
maxCount = count;
}
}
cout << maxCount << endl;
}
答案 3 :(得分:0)
您应该只使用一次遍历数组,但使用两个计数器:
每次遇到 false 时,当前条纹计数器会重置为零,每次遇到 true 时,都会增加当前条纹的值并检查它是否更高比最高条纹计数器,如果是,请更新它。