如何确定数组的计数并输出单个值

时间:2018-03-17 17:43:44

标签: c++ arrays

我正在为以下问题编写一个c ++程序:假设我们从欧洲飞往北美并且每隔x公里测量我们的海拔高度(> 0)。我们在有海的地方测量了零,在有土地的地方测得大于0。我们如何定义海洋的两个海边,并计算欧洲和北美之间的岛屿数量。到目前为止,我能够编写以下代码,但我无法找到岛屿的数量。

#include <iostream>

using namespace std;

int main()
{
    cout << "How many measurements?" << endl;
    int N;
    cin >> N;
    int heights[N];
    for (int i=0; i<N; i++) {
        cin >> heights[i];
    }
    int E, A;
    E=1;
    while (heights[E]>0) {
        E++;
    }
    A=N-2;
    while (heights[A]>0) {
        A--;
    }

    cout << E+1 << " " << A+1 << endl;



    return 0;
}

2 个答案:

答案 0 :(得分:1)

所以你试图找出阵列中有多少连续的正数部分?

// put your measurements here, or code to load from file etc.
std::vector<int> measurements {0,1,5,2,0,0,0,1,3,4,2,1,2,1,0,0};

int islands = 0;
bool prev = false;
for (int m : measurements) {
  bool curr = (m > 0);
  if (curr && !prev)
    islands++;
  prev = curr;
}
std::cout << ("Islands: " + std::to_string(islands) + "\n");

每次正元素出现在零(或开始)之后,这将向islands添加一个,所以当你完成时,islands将是连续正测量的数量。

答案 1 :(得分:1)

您可以使用以下代码解决问题:

int islands = 0;
int land = -1;
for(int i = 0; i < N; i++) {
    if(land == -1 && heights[i] == 0)
        land = 0;
    else if(land == 0 && heights[i] > 0)
        land = 1;
    else if(land == 1 && heights[i] == 0) {
        land = 0;
        islands++;
    }
}

变量land追踪你是在陆地还是水上;当它从陆地(1)变为水(0)时,我们又增加了另一个岛屿。

最初的-1是必要的,所以我们不把最初的陆地(一个大陆)算作岛屿。