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
Powered by WarGods Community™ 2006-2014 ©. All rights reserved.