Функция возвращает ложные значения в c ++ - PullRequest
0 голосов
/ 04 августа 2020

Я играю в Codingame с c ++. У меня только средний уровень в c ++.

проблема, с которой я столкнулся, заключалась в том, что мне нужно дважды вызвать функцию, чтобы получить от нее правильное значение:

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

long double dist(long double phi1,long double lam1,long double phi2,long double lam2){
    phi1 *= M_PI/180;
    phi2 *= M_PI/180;
    lam1 *= M_PI/180;
    lam2 *= M_PI/180;
    long double R{(pow( (phi1-phi2)*cos(lam1 + (lam2-lam1)/2) ,2)  +  pow(lam1 - lam2 , 2))} ;
    return R;
}
long double formatting(string n){ //the values contain a ',' instead of '.'
    long double M{0};
    int comma{0};
    for(char num: n){
        if (num ==','){
            comma += 1;
        } else{
            if (comma){
                M += atoi(&num)/(pow(10,comma));
                comma += 1;
            }else{
                M *= 10;
                M += atoi(&num);
            }
        }
    }
    return M;
}

int main(){   
    long double min_distance{9999999999999};
    string min_name{"None"};
    string LON;
    cin >> LON; cin.ignore();
    string LAT;
    cin >> LAT; cin.ignore();
    int N;
    cin >> N; cin.ignore();
    for (int i = 0; i < N; i++) {
        string id{};
        string name{};
        string add{};
        string tel{};
        string phi{};
        string lam{};

        getline(cin, id,';');
        getline(cin, name,';');
        getline(cin, add,';');
        getline(cin, tel,';');
        getline(cin, phi,';');
        getline(cin, lam);
        if (min_distance >= dist(formatting(LON),formatting(LAT) ,formatting(phi),formatting(lam)) ){
            // min_distance = dist(formatting(LON),formatting(LAT) ,formatting(phi),formatting(lam));
            // dist(formatting(LON),formatting(LAT) ,formatting(phi),formatting(lam));
            min_distance = dist(formatting(LON),formatting(LAT) ,formatting(phi),formatting(lam));
            min_name = name;
        }
    }
    cout << min_name << endl;
    cerr <<"The min distance: "<<min_distance<<endl;
}

если я раскомментируйте одну из строк:

            // min_distance = dist(formatting(LON),formatting(LAT) ,formatting(phi),formatting(lam));
            // dist(formatting(LON),formatting(LAT) ,formatting(phi),formatting(lam));

Я получаю именно то значение, которое хочу (у меня в основном проблемы со значением 0)

неправильный вывод:

cerr : The min distance: 1.25967e-07
cout : Maison de la Prevention Sante

правильный вывод:

cerr : The min distance: 0
cout : Cimetiere Saint-Etienne

Вместо того, чтобы давать вам какой-либо другой вывод, вы можете напрямую go и попробовать его на веб-сайте: https://www.codingame.com/ide/puzzle/defibrillators

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...