C++ Numai cu if si while, am o problema in cod nu reusesc sa aflu de ce nu i-au 100 de puncte.
Paul se joacă un nou joc pe calculator. În el, trebuie să traverseze o zonă montană cât mai rapid posibil. Uitându-se pe harta jocului, el poate observa toate înălțimile terenului din jurul său. Astfel, el poate alege secvența de pași pe care să o facă pornind din punctul în care se află și până la destinație.
Fiind o zonă montană, e posibil ca drumul ales de Paul să urce, iar apoi să coboare pe munte. El se gândește că ar fi bine să evite un astfel de drum, deoarece ar însemna mai mult efort din partea lui. La fel, după ce a coborât o pantă, Paul ar prefera să nu trebuiască să urce din nou.
Cerință
Paul a desenat pe hartă un drum pe care ar putea să o ia pentru a ajunge la destinație. A notat înălțimea fiecărei bucăți de teren pe o hârtiuță, în ordinea în care trebuie să le parcurgă.
Ți se dă șirul de înălțimi ca un șir de numere întregi, nenule, separate prin spațiu. Șirul de numere se încheie cu valoarea 0, care nu face parte din înălțimi (doar marchează finalul șirului). Să se precizeze dacă șirul de înălțimi este crescător, descrescător sau nemonoton. Spunem că un șir e nemonoton dacă nu este nici crescător, nici descrescător în întregime.
Date de intrare
Se dă un șir de numere naturale urmat de valoarea 0.
Date de ieșire
Se va afișa unul dintre mesajele crescator, descrescator sau nemonoton.
Restricții și precizări
Înălțimile sunt numere cuprinse între 0 și 10 000
Se vor citi maxim 1 000 de numere
0 nu face parte din șirul de înălțimi, doar marchează finalul șirului
Pentru simplitate, dacă toate numerele sunt egale sau nu există nicio valoare înaintea lui 0, șirul se consideră nemonoton
Exemple
Date de intrare Date de ieșire
1 2 5 5 10 11 0 crescator
16 7 3 0 descrescator
1 2 2 1 0 nemonoton
Iar codul scris e urmatorul
#include
using namespace std;
int main() {
int a, b = 0, nr = 0, M = 2;
cin >> a;
if (a > 0 && a < 10000){
while (a != 0)
{ b = a;
cin >> a;
if (M != 0 && a != 0)
{ if (a != b) {
nr = 1;
}
if (a >= b && (M == 2 || M == 1))
{
M = 1;
}
else if (a <= b && (M == 2 || M == -1))
{
M = -1;
}
else if (a >= b && M == -1)
{
M = 0;
}
else if (a <= b && M == 1)
{
M = 0;
}
}
}
if ((M == 1 && nr == 0) || M == 0 || M == 2) {
cout << "nemonoton";
}
else if (M == 1) {
cout << "crescator";
}
else if (M == -1) {
cout << "descrescator";
}
}
}
Cu ce gresesc?
Răspunsuri la întrebare
#include <iostream>
using namespace std;
int main() {
int x, y = 0, z = 2, k=0;
cin >> x;
while (x != 0) {
y = x;
cin >> x;
if (z != 0 && x != 0) {
if (x != y)
k = 1;
if (x >= y && (z == 2 || z == 1))
z = 1;
else
if (x <= y && (z == 2 || z == -1))
z = -1;
else
if (x >= y && z == -1)
z = 0;
else
if (x <= y && z == 1)
z = 0;
}
}
if ((z==1 && k==0) || z == 0 || z == 2)
cout << "nemonoton";
if (z == 1)
cout << "crescator";
if (z == -1)
cout << "descrescator";
return 0;
}