Porównywanie kilku warunków w jednym ifie

0

Witam,
Napisałam kod tak aby wykonać następujące zadanie:

"Na wejściu podane jest x- liczba punktów czarnoksiężnika oraz trzy liczby a, b, c, które oznaczają punktację za trzy możliwe do wykonania przez ciebie ruchy. Niestety masz czas na zrobienie tylko dwóch z nich. Po wybraniu dwóch z trzech liczb a, b, c, sumują one i stają się twoją punktacją. Program ma wypisać "ZWYCIESTWO" jeżeli możesz wybrać dwa z trzech ruhców, tak aby ich suma punktów była wieksza niż punkty czarnoksiężnika, czyli x. Wypisz "PRZEGRANA" jeśli w żadnym wypadku nie możesz pokonać(masz mniej lub tyle samo punktów co on)

No więc postanowiłam użyć w tym zadaniu instrukcji warunkowej if. Niestety program nie wykonuje zadania tak, jak powinno być. Wydaję mi się że if jest dość łatwa więc nie powinnam mieć z nią problemów, a jednak... trochę mi nawet wstyd 😅.
Oto kod który napisałam:

#include <iostream>>
using namespace std;


int main()
{
  int x,a,b,c;
  cout<<"Wprowadz punkty czarnoksieznika:  ";
  cin>>x;
  cout<<"Wpisz wartosc swoich ruchow:  ";
  cin>>a>>b>>c;
    if((a+b || a+c || b+c) > x)
  {
    cout<<"ZWYCIESTWO";
    return 0;
  }
  else if((a+b || a+c || b+c) < x)
  { 
    cout<<"PRZEGRANA";
    return 0;
  }
  
}

Po wpisaniu punktów czarnoksiężnika (20) i moich punktów (10, 10, 15) wypisuje mi "PRZEGRANA" :(

Podsumowując... :

  • wytłumaczcie dlaczego taki błąd się pojawia?? :/
  • powiedzcie (albo przynajmniej podpowiedzcie) jak mogę to naprawić?

PS
Szczęśliwego nowego roku!🥳 (wiem że nie na temat)

4

Tak na pierwszy rzut oka, to to:

((a+b || a+c || b+c) > x)

... prawdopodobnie powinno być zapisane jako:

(a + b > x) || (a + c > x) || (b + c > x)

(podobnie drugi if)

0

Rzeczywiście teraz wypsuje mi "ZWYCIESTWO". Kiedy po raz pierwszy dowiedziałam się o istnieniu or był tam taki przykład:

if( if a<0 || b<0)

wszystko było zapisane w jednym nawiasie więc pomyślałam że trzy porównania też można zapisać pod jeden nawias.
Widocznie kiedy jest >2 porówniania to trzeba zapisywać każdy oddzielnie, tak jak napisałeś.

2

Wywal drugiego if'a ma zostać samo else

cin>>a>>b>>c;
int m=min(min(a,b),c); // to sprawdzi 2 warunki zamiast 3-ch jak masz w kodzie
cout<<(a+b+c-m>x?"ZWYCIESTWO":"PRZEGRANA");
return 0;

Od C++14 można: cout<<(a+b+c-min({a,b,c})>x?"ZWYCIESTWO":"PRZEGRANA");

2

Prawie na pewno nie chcesz mieć ani cout<<"Wprowadz punkty czarnoksieznika: ", ani cout<<"Wpisz wartosc swoich ruchow: ";. Zadanie kazało wypisywać co innego.

1
Althorion napisał(a):

Prawie na pewno nie chcesz mieć ani cout<<"Wprowadz punkty czarnoksieznika: ", ani cout<<"Wpisz wartosc swoich ruchow: ";. Zadanie kazało wypisywać co innego.

No tak, wiem że to jest zbędne. Po prostu wizualnie mi to pomagało

3
#ifdef MyTest
  cout<<"Wprowadz punkty czarnoksieznika:  ";
#endif

U siebie kompilujesz z opcją -D MyTest

A jeszcze lepiej zainteresuj się tym: https://4programmers.net/Forum/C_i_C++/365456-zadanie_ze_spoj_obzartuchy?p=1885298#id1885298

1 użytkowników online, w tym zalogowanych: 0, gości: 1