私のコード:
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef pair<int,int> point;
int numTorres, numEdificios;
vector<point> towervec;
vector<point> skyvec;
typedef vector<point>::const_iterator tower_iter;
typedef vector<point>::const_iterator sky_iter;
int noofpaths = 0;
int findslope(const point & i, const point & j, const point & k) {
int dx, dy, dx1, dy1;
dx = j.first - i.first;
dy = j.second - i.second;
int a = dy / dx;
dx1 = k.first - i.first;
dy1 = k.second - i.second;
int b = dy1 / dx1;
if(a != b) {
int length1 = (j.first - i.first) * (j.first - i.first) + (j.second - i.second) * (j.second - i.second);
int length2 = (k.first - i.first) * (k.first - i.first) + (k.second - i.second) * (k.second - i.second);
if(length1 < length2) {
noofpaths++;
}
}
return noofpaths;
}
int main() {
int T;
int n, m;
cout << "enter the test cases" << endl;
cin >> T;
while(T--) {
cout << "towers and skyscrapers" << endl;
cin >> n >> m;
for(int i = 0; i < n; i++) {
point p;
cin >> p.first >> p.second;
towervec.push_back(p);
skyvec.push_back(p);
}
for(int i = 0; i < m; i++) {
point p;
cin >> p.first >> p.second;
skyvec.push_back(p);
}
for(tower_iter i = towervec.begin(); i != towervec.end(); i++) {
for(tower_iter j = i + 1; j != towervec.end(); j++) {
for(sky_iter k = skyvec.begin(); k != skyvec.end(); k++) {
int dx, dy;
noofpaths = findslope(*i, *j, *k);
cout << noofpaths;
}
}
}
}
return 0;
}
ゼロ除算エラーを克服する方法。dx=0 または dy=0 または両方が 0 の場合、コードは壊れます。
このエラーを解決する方法..たとえば、ポイント i=-1,-1 j=1,-1, k-1 ,-1 を取ります。3点が同一線上にあるかどうかを調べています。