1. Se citeşte de la tastatură un număr natural x de cel mult 9 cifre. Se cere să se determine toate numerele care se pot obţine adăugând prima cifră la sfârşitul numărului.
Exemplu: dacă x =67324 se obține următorul şir de numere: 73246, 32467, 24673, 46732, şi 67324.
2. Se citeşte de la tastatură un număr natural x de cel mult 9 cifre. Se cere să se determine dacă numărul are aspect de ,,deal" sau de ,,vale".
Exemplu 1: dacă x =12321 se va afișa
DEAL!, cifrele urcă până la 3, după care coboară
Exemplu 2: dacă x =32123 se va afișa:
VALE!, cifrele numărului coboară până la 1, după care urcă
va rog sa ma ajutati macar la una dintre probleme daca nu stiti la ambel; puteti rezolva in C++ sau in pseudocod, cum va e mai usor!
ofer coroană si ce mai vreti voi;))
Răspunsuri la întrebare
Răspuns:
1. #include <iostream>
using namespace std;
int main()
{
int x, cx, C = 0, pc, i, f = 1;
cin >> x;
cx = x;
while (cx != 0)
{
C++;
cx = cx / 10;
}
cx = x;
for (i = 1; i < C; i++)
f = f * 10;
for (i = 1; i < C; i++)
{
pc = cx / f;
cx = cx % f;
cx = cx * 10 + pc;
cout << cx << " ";
}
cout << x << " ";
return 0;
}
2. #include <iostream>
using namespace std;
int main()
{
int x, cx, max = 0, min = 10, deal = 1, vale = 1, v[9], i, rast = 0, imax, imin, j;
cin >> x;
cx = x;
while (cx != 0)
{
rast = rast * 10 + cx % 10;
cx = cx / 10;
}
for (j = 1; j <= 9 && rast != 0; j++)
{
v[j] = rast % 10;
rast = rast / 10;
if (v[j] > max)
{
max = v[j];
imax = j;
}
if (v[j] < min)
{
min = v[j];
imin = j;
}
}
j = j - 1;
if (imax == 1 || imax == j)
deal = 0;
if (imin == 1 || imin == j)
vale = 0;
for (i = 1; i < imax && deal == 1; i++)
{
if (v[i] > v[i + 1])
deal = 0;
}
for (i = imax + 1; i < j && deal == 1; i++)
{
if (v[i] < v[i + 1])
deal = 0;
}
for (i = 1; i < imin && vale == 1; i++)
{
if (v[i] < v[i + 1])
vale = 0;
}
for (i = imin + 1; i < j && vale == 1; i++)
{
if (v[i] > v[i + 1])
vale = 0;
}
if (deal == 1)
cout << "DEAL!" << endl;
else
{
if (vale == 1)
cout << "VALE!" << endl;
else cout << "NICI DEAL, NICI VALE!" << endl;
}
return 0;
}
Explicație:
Te rog sa urmaresti cu atentie explicatiile acestor probleme daca ai nelamuriri, iar daca se intampla sa nu iti raspunda la intrebari, intreaba-ma pe chat.
La prima problema am calculat, in prima faza, numarul de cifre ale lui x. L-am memorat pe x in cx (o copie a lui x) pentru a nu pierde continutul ei, intrucat trebuie afisat ultimul (asa reiese din exemplul tau). Apoi variabila f ia practic valoarea 10^(C-1), astfel ca numarul de zerouri ale lui f este egal cu nr de cifre (adica C) - 1. Astfel, impartim pe cx (adica x) la f, ca sa extragem prima cifra a acestuia (in variabila pc). Dupa aceea, eliminam prima cifra a lui cx prin instructiunea cx = cx % f, deoarece aceasta trebuie sa apara la final. Inmultim pe cx (care acum si-a pierdut prima cifra) cu 10, dupa care adunam la acesta prima cifra si il afisam. Procedam asa de C-1 ori, deoarece in total trebuie sa afisam atatea numere cate cifre are numarul initial. Astfel, la final, il afisam pe x, care a ramas intact pe tot parcursul executiei programului.
La a doua problema in schimb e mai complicat. Pentru a-mi usura munca, am memorat toate cifrele lui x intr-un vector, deoarece este mai usor sa compar cifrele sale, sa vad ce si cum. Astfel, am calculat la inceput rasturnatul lui x si apoi am inceput sa memorez in vector cifrele numarului. Aici e partea interesanta. Primul element din vector (adica v[1]) memoreaza ultima cifra a rasturnatului lui x, care este chiar prima cifra a lui x. Continuam tot asa pana cand toate cifrele lui x (sau ale rasturnatului sau) au fost memorate in vector. Variabila j, care este contorul, s-a micsorat cu 1, deoarece, la finalul executiei structurii for, este cu 1 mai mare decat nr de cifre ale lui x. Intre timp, am memorat in max si min cea mai mare, respectiv cea mai mica cifra a lui x, si de asemenea indicele acestora (imin si imax). Daca unul dintre ele (adica min si max) este 1 sau j (adica prima sau ultima cifra a lui x), unul dintre semafoarele deal si vale se face 0, deoarece valoarea minima/maxima nu are nicio valoare in stanga/dreapta ei, deci nu poate forma un "deal"/"vale". Dupa aceea, am verificat pentru ambele cazuri daca respecta structura unui numar cu aspect "deal" sau "vale". Aici nu cred ca vei avea probleme in a intelege cum am procedat. La final, daca deal este 1, atunci numarul x este "deal". In schimb, daca vale este 1, inseamna ca x este "vale". Totusi, daca ambele sunt 0, atunci x nu este nici "deal", nici "vale".