Informatică, întrebare adresată de Swergiu, 8 ani în urmă

După ce a devenit foarte popular, Mark a primit în total a cadouri de la fanii săi. Acum vrea să se mute într-o casă mai mare și trebuie să pună toate cadourile în cutii pentru a se putea muta. Pentru că e ordonat, Mark vrea să pună în fiecare cutie exact b cadouri. Putem să ne imaginăm că Mark poate să facă rost de oricâte cutii oricât de mari.

Spuneți dacă Mark poate să își mute cadourile respectând condiția din enunț.

Am rezolvat problema corect cu instructiunea else, insa eu vreau sa stiu cum se poate rezolva fara "else". Multumesc

#include
using namespace std;

int main() {
int a, b;
cin >> a >> b;
if ( a % b == 0 ) {
cout << "posibil";
}
else cout << "imposibil";
return 0;
}

Răspunsuri la întrebare

Răspuns de Addriss
0

Răspuns:

In loc de tot if-ul ala poti sa ai:

std::cout << ((a % b == 0) ? "posibil" : "imposibil") << std::endl;

Explicație:

Răspuns de andrei750238
6

In primul rand, rezolvarea ta nu cred ca se pliaza pe cerinta problemei.

"Putem să ne imaginăm că Mark poate să facă rost de oricâte cutii oricât de mari.". Acest lucru sugereaza ca nu citim cate cutii are, ci spunem doar daca exista posibilitatea sa transporte cadourile.

Pentru ca n cadouri pot fi transportate in n cutii si putem transporta toate cadourile intr-o fiecare cutie, cerinta ar fi banala. Deci presupun ca se cere  sa verificam daca exista un numar natural i \in \{2, 3...,n_{cadouri}-1\} astfel incat n_{cadouri}\%i=0. Pe scurt, trebuie sa verificam daca numarul de cadouri e prim sau nu.

Rezolvare :

#include <iostream>

#include <algorithm>

#include <fstream>

using namespace std;

int main() {

int nr_cadouri;

cout << "Introduceti numarul de cadouri primite de Mark : ";

cin >> nr_cadouri;

bool este_prim = 1;

for (int i = 2; i * i <= nr_cadouri; i++) {

 if (nr_cadouri % i == 0) este_prim = 0;

}

if (este_prim) cout << "im";

cout << "posibil";

}

Ne putem folosi de despartirea sirului de caractere "imposibil" in "im" si "posibil" pentru a evita folosirea instructiunii else. Astfel, vom afisa "im" urmat de "posibil" daca nu se poate sau doar "posibil" daca se poate.

Putem folosi si operatorul ternar pentru a evita "else" :

#include <iostream>

#include <algorithm>

#include <fstream>

using namespace std;

int main() {

int nr_cadouri;

cout << "Introduceti numarul de cadouri primite de Mark : ";

cin >> nr_cadouri;

bool este_prim = 1;

for (int i = 2; i * i <= nr_cadouri; i++) {

 if (nr_cadouri % i == 0) este_prim = 0;

}

cout << (este_prim ? "imposibil" : "posibil");

}

Operatorul ternar evalueaza prima parte din expresie (cea din fata semnului "?". Daca e adevarata intreaga structura se evalueaza la expresia din mijloc - dintre ? si :, iar in sfarsit, daca conditia e falsa se evalueaza la expresia care urmeaza dupa caracterul :)

Programul tau se poate rescrie astfel :

#include

using namespace std;

int main() {

int a, b;

cin >> a >> b;

if ( a % b != 0 ) {

cout << "im";

}

cout << "posibil";

return 0;

}

Alte întrebări interesante