0

私のコード:

#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点が同一線上にあるかどうかを調べています。

4

2 に答える 2

3

変数が 0 かどうかをチェックする if 条件を設定し、代わりに除算ステートメントで変数を 0 に設定します。

于 2013-02-03T07:31:57.710 に答える
0

外積を使用します。平行ベクトルの場合はゼロです。

#include <iostream>
#include <utility>

using namespace std;

typedef pair<int,int> point;

int SegmentsAreParallel(const point & i, const point & j, const point & k)
{
    int dx1, dy1, dx2, dy2;

    dx1 = j.first - i.first;
    dy1 = j.second - i.second;

    dx2 = k.first - i.first;
    dy2 = k.second - i.second;

    return dx1 * dy2 - dy1 * dx2 == 0;
}

int main()
{
  point p1(0, 0);
  point p2(1, 1);
  point p3(2, 2);
  point p4(-1, -1);
  point p5(1, -1);
  point p6(0, 10);
  point p7(0, 100);
  point p8(10, 0);
  point p9(100, 0);

  cout << SegmentsAreParallel(p1, p2, p3) << endl;
  cout << SegmentsAreParallel(p1, p2, p4) << endl;
  cout << SegmentsAreParallel(p1, p2, p5) << endl;
  cout << SegmentsAreParallel(p1, p6, p7) << endl;
  cout << SegmentsAreParallel(p1, p8, p9) << endl;
  cout << SegmentsAreParallel(p1, p6, p9) << endl;

  return 0;
}

出力 ( ideone ):

1
1
0
1
1
0
于 2013-02-03T08:05:49.960 に答える