我正在为以下问题编写一个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;
}
答案 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
是必要的,所以我们不把最初的陆地(一个大陆)算作岛屿。