• 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ź

Hosting forpsi easy 1 pln
0 głosów
125 wizyt
pytanie zadane 7 maja w C i C++ przez alfutek Początkujący (360 p.)
zamknięte 8 maja 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 przez adrian17 Ekspert (336,700 p.)
Tak na oko to masz źle zakresy BMI zapisane.
komentarz 7 maja 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 przez adrian17 Ekspert (336,700 p.)
No, to też jest niezgodne z treścią.
komentarz 8 maja przez alfutek Początkujący (360 p.)
edycja 8 maja 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 przez Great Stary wyjadacz (12,220 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 przez Great Stary wyjadacz (12,220 p.)
wybrane 8 maja 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 przez alfutek Początkujący (360 p.)
Dziękuję bardzo za pomoc, działa :)

Podobne pytania

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

92,105 zapytań

140,763 odpowiedzi

317,744 komentarzy

61,426 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 785p. - Łukasz Eckert
  2. 777p. - Dawid128
  3. 738p. - Eryk Andrzejewski
  4. 733p. - Michal Drewniak
  5. 730p. - Mikbac
  6. 712p. - rucin93
  7. 710p. - sefirek
  8. 674p. - CC PL
  9. 647p. - nidomika
  10. 625p. - Arkadiusz Waluk
  11. 595p. - the Bielsky
  12. 573p. - robwarsz
  13. 571p. - TheLukaszNs
  14. 537p. - 13NOONE37
  15. 533p. - Henry Saele
Szczegóły i pełne wyniki

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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...