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

Swaps 438
Cerință
Se dă un număr natural N. Pentru a fi demn de afișat, a doua cifră trebuie interschimbată cu penultima.

Date de intrare
Se citește un singur număr natural, N.

Date de ieșire
Se afișează numărul N, după ce este demn de această operație.

Restricții
9 < N < 1 000 000 000
Exemplu
Date de intrare Date de ieșire
123456 153426

VA ROG SA REZOLVATI NUMAI CU WHILE SI CU IF , ELSE IF EVENTUAL !
EXPLICATI SOLUTIA ! MULTUMESC !

Răspunsuri la întrebare

Răspuns de andrei750238
5

#include <iostream>

using namespace std;

int main(){

long n,cif=1;

//Citeste nr

cin >> n;

//Determina puterea lui 10 care are numar egal de cifre cu n

while(cif<=n)cif*=10;

cif/=10;

//Determina componente

int prim = n/cif;

int doi = n/(cif/10)%10;

int mijloc = (n-prim*cif-doi*(cif/10))/100;

int penultima = (n%100)/10;

int ultima = n%10;

//Construieste numarul cerut

cout << prim << penultima << mijloc << doi << ultima;

}

Nota : Solutia este una simpla, usor de inteles si nu functioneaza pentru integ setul de date de intrare (mai ales cand nu exista valori intre a doua si penultima cifra ori exista cifre nule). O rezolvare bazata pe vectori ar futea fi mult mai robusta si ar putea rezolva limitarile acestei solutii. Pe exemplul dat solutia functioneaza perfect, dupa cum poti vedea in imagine.

Anexe:

mihailv1610: AM INLOCUIT INT IN LOC DE LONG , pe codeblocks merge , dar pe platforma imi da 32 de puncte
mihailv1610: NU STIU DE CE !
mihailv1610: AM ANEXAT ANALIZA FACUTA PE PLATFORMA SI SPUNE :
mihailv1610: 32 puncte
Ce am greșit?
Test Timp Scor
1 0.3992 Răspuns greșit
2 0.3975 Răspuns greșit
3 0.3963 16
4 0.3976 16
5 0.3976 Răspuns greșit
6 0.3974 Răspuns greșit
andrei750238: Ti-am spus, solutia nu e valabila pentru toate seturile de date de intrare...
Daca vrei as putea sa o fac cu vectori [entru punctaj maxim
mihailv1610: nu am ajuns la vectori !
andrei750238: Atunci 32 de puncte...
andrei750238: De ce nu înveți singur mai multe lucruri la informatică ? Tin minte ca eu stiam o buna parte din materie inainte să înceapă anul de pe YouTube. Putem sa te ajutăm.
andrei750238: Fara vectori chiar nu prea ai cum sa rezolvi problema, pierzi cateva cifre in mijlocul numărului indiferent de abordare.
andrei750238: Ma gandesc la o posibila soluție maine, dar fara vectori nu prea se poate un algoritm functional pentru toate cazurile.
Alte întrebări interesante