PDA

View Full Version : [REZOLVAT] Problema informatica



~TraNda~
20-11-2014, 11:28 PM
buun :)) ca tot a zis Tiger sa postez aici :p . Am urmatoare problema ca tema: se dau 2 numere. sa se formeze din cifrele lor un alt numar in care sa punem cifrele impare la inceput urmate de cele pare :-? jur ca ma bate rau problema :)))
Mentionez ca-s clasa a Xa asa ca nu ma luati tare :)) (c/c++)
Exemplu: nr1=12345 nr2=6789, se va forma numarul:135792468

Tiger
21-11-2014, 12:07 AM
Data viitoare te rog posteaza mai din timp anuntul.

Nu te-am mai complicat cu functii si altele, ti-am facut-o clasica si neoptimizata.

Pozitia 0 din acele 2 tablouri (rez_impare / rez_pare) inseamna elementele pare si impare din primul numar, iar pozitia 1 inseamna elementele pare si impare din al doilea numar.


#include <iostream>

using namespace std;

int main()
{
int numar, aux, rez_impare[2] = {0, 0}, rez_pare[2] = {0, 0};
long rezultat = 0;

// Citim primul numarul
cout<<"Introduceti primul numar: ";
cin>>numar;

// "Despartim" numerele pare de cele impare pentru primul numar
while (numar > 0)
{
aux = numar % 10;
if (aux % 2 == 0)
rez_pare[0] = rez_pare[0]*10 + aux;
else
rez_impare[0] = rez_impare[0]*10 + aux;

numar /= 10;
}

// Citim cel de-al 2-lea numar
cout<<"Introduceti al 2-lea numar: ";
cin>>numar;

// "Despartim" numerele pare de cele impare pentru al 2-lea numar
while (numar > 0)
{
aux = numar % 10;
if (aux % 2 == 0)
rez_pare[1] = rez_pare[1]*10 + aux;
else
rez_impare[1] = rez_impare[1]*10 + aux;

numar /= 10;
}

int i;


//Incepem sa construim rezultatul final prin adaugarea numerelor impare initial, apoi cele pare
for (i = 0; i < 2; i++)
{
while (rez_impare[i] > 0)
{
rezultat = rezultat*10 + rez_impare[i]%10;
rez_impare[i] /= 10;
}
}

for (i = 0; i < 2; i++)
{
while (rez_pare[i] > 0)
{
rezultat = rezultat*10 + rez_pare[i]%10;
rez_pare[i] /= 10;
}
}

cout<<"Rezultatul este: "<< rezultat;

return 0;
}

~TraNda~
21-11-2014, 12:11 AM
#include <iostream>
using namespace std;
long aranjare(long x,long y,long a,long b)
{
a=0;b=0;
while((x>0) && (y>0))
{
if((x%10)%2==1)
{
a=a*10+x%10;
x=x/10;
}
if((x%10)%2==0)
{
b=b*10+x%10;
x=x/10;
}
if((y%10)%2==1)
{
a=a*10+y%10;
y=y/10;
}
if((y%10)%2==0)
{
b=b*10+y%10;
y=y/10;
}
}
while(b)
{
a=a*10+b%10;
b=b/10;
}
return a;
}
int main()
{
long n=0,m=0,a=0,b=0;
cout<<"n=";cin>>n;
cout<<"m=";cin>>m;
cout<<aranjare(n,m,a,b);
return 0;
}

am incercat ceva de genu, dar imi da cateva erori :)) daca te poti uita :D

Tiger
21-11-2014, 12:30 AM
Problema:
I. Nu ambele numere sunt egale ca si lungime

while((x>0) && (y>0))

II. Prin codul de mai jos, aranjarea numerelor se face incorect:
if((x%10)%2==1)
{
a=a*10+x%10;
x=x/10;
}
if((x%10)%2==0)
{
b=b*10+x%10;
x=x/10;
}
if((y%10)%2==1)
{
a=a*10+y%10;
y=y/10;
}
if((y%10)%2==0)
{
b=b*10+y%10;
y=y/10;
}

De exemplu daca luam n = 123 si m = 456, rezultatul va fi: 3154062.

III. Faptul ca nu astepti sa se termine rezultatul cu numele impare de la primul numar si te bagi imediat in al doilea numar cu numele impare, idem pentru cele pare.

~TraNda~
21-11-2014, 12:35 AM
Aaa, gata, am inteles. Multumesc frumos :D