• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed FR_02_06 - BMI - błędna odpowiedź

Object Storage Arubacloud
0 głosów
135 wizyt
pytanie zadane 7 maja 2023 w C i C++ przez alfutek Początkujący (360 p.)
zamknięte 8 maja 2023 przez alfutek

Dzień dobry, 

 

mam drobny problem ze spoj i zadaniem https://pl.spoj.com/problems/FR_02_06/, mianowicie sędzia Spoj ciągle wyrzuca mi błędna odpowiedź mimo iż wydaje mi się, że program działa prawidłowo, według ideone również program działa prawidłowo.

szukam i szukam co może być nie tak, źle znaleźć nie mogę 

będę wdzięczna za wszystkie podpowiedzi. 

 

#include <iostream>
#include <vector>
#include <map>
#include <string>

using namespace std;

struct Person {
    string name = "";
    double weightInKilograms = 0;
    double heightInCentimeters = 0;
};

Person enterPersonDetails() {
    Person person;
    cin >> person.name >> person.weightInKilograms >> person.heightInCentimeters;
    return person;
}

double calculateBMI(const Person& person) {
    double heightInMeters = person.heightInCentimeters / 100.0;
    return person.weightInKilograms / (heightInMeters * heightInMeters);
}

string classify(const Person& person) {
    double bmi = calculateBMI(person);
    if (bmi <= 18.5)
        return "niedowaga";
    else if (bmi <= 25)
        return "wartosc prawidlowa";
    else
        return "nadwaga";
}

void groupPeople(const vector<Person>& people, map<string, vector<Person>>& groups) {
    for (const Person& person : people) {
        string classif = classify(person);
        groups[classif].push_back(person);
    }
}

void printPeople(const vector<Person>& people, const string& groupName) {
    if (!people.empty()) {
    cout << groupName << " :" <<endl;
    for (const Person& person : people)
        cout << person.name << endl;
    cout << endl;
    }
}

int main() {
    int howManyTest;
    cin >> howManyTest;

    vector<Person> people;
    for (int i = 0; i < howManyTest; i++) {
        people.push_back(enterPersonDetails());
    }

    map<string, vector<Person>> groups;
    groupPeople(people, groups);

    printPeople(groups["niedowaga"], "niedowaga");
    printPeople(groups["wartosc prawidlowa"], "wartosc prawidlowa");
    printPeople(groups["nadwaga"], "nadwaga");

    return 0;
}

 

komentarz zamknięcia: Otrzymałam podpowiedź do zadanego pytania
komentarz 7 maja 2023 przez adrian17 Ekspert (344,860 p.)
Tak na oko to masz źle zakresy BMI zapisane.
komentarz 7 maja 2023 przez alfutek Początkujący (360 p.)
zmiana zakresów na

   if (bmi < 18.5)
        return "niedowaga";

    else if (bmi > 18.5 && bmi < 25)
        return "wartosc prawidlowa";

    else if (bmi >= 25.0)
        return "nadwaga";

też niewiele pomogła :/
komentarz 7 maja 2023 przez adrian17 Ekspert (344,860 p.)
No, to też jest niezgodne z treścią.
komentarz 8 maja 2023 przez alfutek Początkujący (360 p.)
edycja 8 maja 2023 przez alfutek
Faktycznie, chyba za długo patrzę w kod.

zakresy poprawione, dwukropek w pustej grupa poprawiony i nadal błędna odpowiedź

 

może jutro na świeżo na cos wpadnę :)

Bardzo dziękuję za wszystkie podpowiedzi
komentarz 8 maja 2023 przez Great Stary wyjadacz (12,340 p.)

@alfutek Dodałem poprawny kod do mojej odpowiedzi. Zmiana zakresów nie ma żadnego znaczenia, ponieważ SPOJ nie testuje restrykcyjnie granicznych wartości BMI.

1 odpowiedź

+1 głos
odpowiedź 7 maja 2023 przez Great Stary wyjadacz (12,340 p.)
wybrane 8 maja 2023 przez alfutek
 
Najlepsza

W przypadku pustej grupy powinieneś wypisać jej nazwę. Wypisz nazwę grupy bez dwukropka.

void printPeople(const vector<Person>& people, const string& groupName) {
    //if (!people.empty()) {
        cout << groupName << endl; 
        for (const Person& person : people)
            cout << person.name << endl;
        cout << endl;
    //}
}

Poprawny kod:

#include <iostream>
#include <vector>
#include <map>
#include <string>
 
using namespace std;
 
struct Person {
    string name = "";
    double weightInKilograms = 0;
    double heightInCentimeters = 0;
};
 
Person enterPersonDetails() {
    Person person;
    cin >> person.name >> person.weightInKilograms >> person.heightInCentimeters;
    return person;
}
 
double calculateBMI(const Person& person) {
    double heightInMeters = person.heightInCentimeters / 100.0;
    return person.weightInKilograms / (heightInMeters * heightInMeters);
}
 
string classify(const Person& person) {
    double bmi = calculateBMI(person);
    if (bmi <= 18.5)
        return "niedowaga";
    else if (bmi <= 25)
        return "wartosc prawidlowa";
    else
        return "nadwaga";
}
 
void groupPeople(const vector<Person>& people, map<string, vector<Person>>& groups) {
    for (const Person& person : people) {
        string classif = classify(person);
        groups[classif].push_back(person);
    }
}
 
void printPeople(const vector<Person>& people, const string& groupName) {
    cout << groupName << endl;
    for (const Person& person : people)
        cout << person.name << endl;
    cout << endl;
}
 
int main() {
    int howManyTest;
    cin >> howManyTest;
 
    vector<Person> people;
    for (int i = 0; i < howManyTest; i++) {
        people.push_back(enterPersonDetails());
    }
 
    map<string, vector<Person>> groups;
    groupPeople(people, groups);
 
    printPeople(groups["niedowaga"], "niedowaga");
    printPeople(groups["wartosc prawidlowa"], "wartosc prawidlowa");
    printPeople(groups["nadwaga"], "nadwaga");
} 
komentarz 8 maja 2023 przez alfutek Początkujący (360 p.)
Dziękuję bardzo za pomoc, działa :)

Podobne pytania

0 głosów
1 odpowiedź 624 wizyt
pytanie zadane 26 sierpnia 2018 w SPOJ przez koziolek8820 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 965 wizyt
pytanie zadane 18 lipca 2017 w C i C++ przez Kamil Paradowski Użytkownik (620 p.)
0 głosów
1 odpowiedź 818 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...