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

Mam problem z zadaniem cpp

Object Storage Arubacloud
0 głosów
328 wizyt
pytanie zadane 29 września 2021 w C i C++ przez diedassel Użytkownik (570 p.)
edycja 29 września 2021 przez diedassel

Witajcie, ostatnio utknąłem na pewnym zadaniu z instrukcji warunkowej IF, obejrzałem odcinek Pana Zelenta, ale chyba jestem jeszcze zbyt słaby na takiego typu zadania, wracając do treści:

Ania przejeżdża n razy w miesiącu autobusem. Do wyboru są bilety jednorazowe za x złotych oraz k-przejazdowe za y złotych. Pomóż Ani wydać jak najmniej pieniędzy, a jednocześnie żeby ilość zakupionych biletów mogła starczyć na przejazd n razy autobusem. Przyjmujemy, że ceny biletów to tylko liczby całkowite.

Wejście:

W standardowym wejściu na początku wczytujemy 4 zmienne n x k y(0 <= n <= x <= k <= y <= 1.000.000.000)

Wyjście:

Program powinien wypisać najmniejszą cenę, jaką powinna zapłacić Ania.

Przykład:

Dla danych wejściowych:
10 2 3 5
poprawnym wynikiem jest liczba:
17

Przykład #2:

Dla danych wejściowych:
20 3 7 15
poprawnym wynikiem jest liczba:
45

Przykład #3:

Dla danych wejściowych:
30 1.50 40 2
poprawnym wynikiem jest liczba:
2

Ze strony matematycznej umiem to obliczyć, ale właśnie; wymyśleć warunek do zadania, to jest problem.

Dziękuję za wszystkie podsyłane odpowiedzi

komentarz 29 września 2021 przez Oscar Nałogowiec (29,290 p.)
Mam wątpliwości co do podanych przykładowych danych:

10 przejazdów, bilet jednorazowy po 2 zl, bilet 3 przejazdowy po 5 zl. Ok, to ma sens.

Ale odpowiedź 20 zł jest błedna - kupujemy 3 bilety 3 przejazdowe po 5 zl = 15zł, brakuje jeszcze jednego dnia, więc bierzemy bilet jednorazowy za 2 zl, razem wydaliśmy 17zł. No chyba że jest jeszcze warunek że można użyć tylko 1 typu biletów. W takim razie to banał bo są tylko 2 możliwości i wystarczy porównać wyniki.
komentarz 29 września 2021 przez diedassel Użytkownik (570 p.)

Masz racje, w zadaniu można użyć tylko jednego typu biletów, aczkolwiek chodzi mi właśnie o tą opcję, którą napisałeś w komentarzu, czyli, że można użyć dwóch typów. I właśnie z tym mam problem.

Zmieniłem także opis problemu, aby nie był on błędny dla takich danych jak poniżej:

Dla danych wejściowych:
10 2 3 5
poprawnym wynikiem jest liczba:
20 —> 17

komentarz 29 września 2021 przez Oscar Nałogowiec (29,290 p.)

Zasadniczo są tylko 3 możliwości

  1. Same jednoprzejazdowe
  2. Same wieloprzejazdowe
  3. O jeden mniej wieloprzejazdowy i uzupełnienie jednoprzejazdowymi.

Trzecia opcja ma sens oczywiście tylko gdy w wariancie 2 zostaną niewykorzystane przejazdy.

komentarz 29 września 2021 przez diedassel Użytkownik (570 p.)
Gdzie w moim kodzie jest jakas pomylka:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    float n,x,k,y; cin>>n>>x>>k>>y;
    if(k>n&&y<x) cout<<ceil(y);
    else if(k>n&&y>x)
    {
        if(n*x>y) cout<<ceil(y);
        else cout<<ceil(n*x);
    }
    else if((n*x)<n/k*y) cout<<ceil(n*x);
    else cout<<ceil(n/k*y);
}
komentarz 29 września 2021 przez Snejki Stary wyjadacz (14,520 p.)
wydaje mi się, że najprostszym sposobem jest najpierw obliczenie ceny przejazdów, gdyby Ania przejeżdżała je na biletach jednorazowych, a następnie w pętli próbować zastępować bilety pojedyńcze tymi wieloprzejazdowymi i sprawdzać jak ta zmiana wpłynie na zmianę ceny przejazdów
komentarz 30 września 2021 przez Whistleroosh Maniak (56,980 p.)

@blackjajko,  w takich zadaniach nie opłaca się rozbijać problemu na tyle ifów, bo łatwo sie w tym pogubić. W szczególności tego pierwszego i drugiego ifa dałoby się pozbyć. Ale ogólnie błąd jest w trzeci (zewnetrznym) ifie. Koszt podróży to nie jest n/k*y. Powinieneś policzyć koszt gdybyś korzystał tylko zbiletow y i koszt gdybyś korzystał z jednego mniej biletu y i x jako pozostałe (tak jak napisał @Oscar). Poza tym nie korzystaj z liczb zmiennoprzecinkowych bo nie możesz przecież kupić n/k biletów jeżeli n/k nie jest liczbą calkowitą

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

–1 głos
0 odpowiedzi 529 wizyt
0 głosów
1 odpowiedź 752 wizyt
0 głosów
2 odpowiedzi 700 wizyt
pytanie zadane 18 listopada 2018 w C i C++ przez Rosol Kuba Początkujący (380 p.)

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!

...