Problemă în C++

Discutii despre tot ce nu se incadreaza in celelalte categorii.

Moderators: Moderatori ajutatori, Moderatori

Post Reply
User avatar
QuiteEnough
Membru, skill +1
Membru, skill +1
Posts: 190
Joined: 28 Jul 2014, 12:36
Detinator Steam: Da
CS Status: Everybody lies.
Fond eXtream: 0
Has thanked: 1 time
Been thanked: 2 times
Contact:

14 Jan 2015, 10:19

Care mă poate ajuta cu următoarea problemă...

Code: Select all

Fie n un număr natural dat. Să se determine cel mai mare număr ce se poate forma cu cifrele lui n. Exemplu : Dacă n este 179 numărul afişat va fi 971.
Am încerc să o fac dar n-am ajuns la nimic.
RoyalServer
User avatar
uzzi
Membru, skill +2
Membru, skill +2
Posts: 780
Joined: 28 Aug 2007, 17:12
Detinator Steam: Da
CS Status: 24/24 CS:GO
SteamID: steamhighman
Reputatie: Restrictie moderator
Nick anterior: Hermes, HADES
Utilizator neserios ( tepar )
Fond eXtream: 0
Location: Craiova - București
Contact:

14 Jan 2015, 10:27

-editat-
Last edited by uzzi on 14 Jan 2015, 15:58, edited 1 time in total.
"Happy to be alive."

STEAM: http://steamcommunity.com/id/steamhighman
Mă găsești doar pe steam.
User avatar
Carnacior
Membrul anului 2016
Membrul anului 2016
Posts: 1762
Joined: 23 Jun 2013, 14:08
Detinator Steam: Da
CS Status: I eat more pussy than cervical cancer
Detinator server CS: jb.b-zone.ro
SteamID: -
Reputatie: Fost Scripter eXtreamCS
Membrul anului 2016
Membru Club eXtreamCS (1 iul )
Location: Targu Mures
Has thanked: 5 times
Been thanked: 13 times
Contact:

14 Jan 2015, 12:18

problema am facut-o considerand ca numarul nu are mai mult de 3 cifre, ar trebui sa fie specificat altfel problema e prea complexa pentru nivelul asta

int n;
int v[3]; //facem un vector in care sa stocam numerele pentru sortare
cout<<"introduceti n: ";
cin>>n;
cout<<endl;
v[0]=n/100; //prima cifra, impartirea lui n la 100 fara rest
n=n-(n1*100); //scapam de prima cifra din n, ca sa avem un numar de 2 cifre
v[1]=n/10; // a doua cifra, impartirea noului n la 10 fara rest
v[2]=n-(n2*10) // a treia cifra, ar trebui sa-ti dai seama de ce
//mai jos ar merge un algoritm de sortare,dar fiind doar 3 elemente, e mai eficient asa
if(v[1]>=v[2] && v[1]>=v[3])
{
if(v[2]>=v[3])
cout<<v[1]<<v[2]<<v[3];
else
cout<<v[1]<<v[3]<<v[2];
}
else if(v[2]>=v[1] && v[2]>=v[3])
{
if(v[1]>=v[3])
cout<<v[2]<<v[1]<<v[3];
else
cout<<v[2]<<v[3]<<v[1];
}
else if(v[3]>=v[2] && v[3]>=v[1])
{
if(v[1]>=v[2])
cout<<v[3]<<v[1]<<v[2];
else
cout<<v[3]<<v[2]<<v[1];
}
Ai nevoie de o protectie pentru server? R4GE Server Guard
Cel mai avansat si folosit plugin de protectie romanesc public! Nu ma crezi? VERIFICA


http://www.facebook.com/xyz.aron
Follow me for random bullshit and possibly interesting updates
Skype @ xyz_aron


Image
User avatar
IsTI37
Fost administrator
Fost administrator
Posts: 10987
Joined: 10 Apr 2007, 15:02
Detinator Steam: Da
Reputatie: Fost administrator
Fost SysAdmin
Fost Fondator GTA5 (CVL)
Location: Cluj-Napoca
Has thanked: 28 times
Been thanked: 776 times

14 Jan 2015, 15:33

Sunt 2 idei de baza:

Poti prelucra un numar cu n mod 10 pentru a lua ultima cifra si n div 10 pentru a taia ultima cifra.
Cea mai simpla metoda e sa salvezi numarul existent si sa 'sortezi' cifrele, refaci numarul cu a*100+b*10+c;

O sortare foarte simpla daca sunt doar 3 cifre e sa iei maximul si sa il inmultesti cu 100, iei cel mai mic numar si il adaugi fara sa il inmultesti si numarul ramas il inmultesti cu 10 (pe toate le adaugi la o variabila sa formeze un nou numar).
cristi-indungi
Membru, skill +1
Membru, skill +1
Posts: 223
Joined: 19 Nov 2014, 12:34
Detinator Steam: Da
CS Status: Tu ce face?? =))
Detinator server CS: da
SteamID: cristiindungi
Fond eXtream: 0
Location: vaslui
Contact:

14 Jan 2015, 15:46

Ii cu inversu unui nr
Ex:
n=127
inv=721

Iti fac cu algoritm

Inceput
intreg n,inv<=0
Citeste n
Cat timp(n<>0)executa
inv<=inv*10+n mod 10
n<=n div 10
Scrie inv
Sfarsit

C++
#include<iostream>
using namespace std;
int main()
{
int inv,c,n;
inv=0;
cout<<"Numar: ";
cin>>n;
while(n!=0)
{
c=n%10;
inv=inv*10+c;
n=n/10;
}
cout<<"Inversul este "<<inv;
return 0;
}

Sper sa fie bun ce am facut,sau sper sa fie bine ce am zis
Detalii:
Y!M:[email protected]
My Server
Image[/center]

Download Counter Strike: http://www.girlshare.ro/34498849
User avatar
IsTI37
Fost administrator
Fost administrator
Posts: 10987
Joined: 10 Apr 2007, 15:02
Detinator Steam: Da
Reputatie: Fost administrator
Fost SysAdmin
Fost Fondator GTA5 (CVL)
Location: Cluj-Napoca
Has thanked: 28 times
Been thanked: 776 times

14 Jan 2015, 18:35

cristi-indungi wrote:Ii cu inversu unui nr
Ex:
n=127
inv=721

Iti fac cu algoritm

Inceput
intreg n,inv<=0
Citeste n
Cat timp(n<>0)executa
inv<=inv*10+n mod 10
n<=n div 10
Scrie inv
Sfarsit

C++
#include<iostream>
using namespace std;
int main()
{
int inv,c,n;
inv=0;
cout<<"Numar: ";
cin>>n;
while(n!=0)
{
c=n%10;
inv=inv*10+c;
n=n/10;
}
cout<<"Inversul este "<<inv;
return 0;
}

Sper sa fie bun ce am facut,sau sper sa fie bine ce am zis

Code: Select all

Să se determine cel mai mare număr ce se poate forma cu cifrele lui n. 
Daca faci asa la un test iei maxim jumatate de puncte.
User avatar
netzwerk
Membru, skill +1
Membru, skill +1
Posts: 312
Joined: 18 Dec 2014, 18:12
Detinator Steam: Nu
CS Status: fuck dush
Fond eXtream: 0
Contact:

14 Jan 2015, 18:48

| Afiseaza codul
#include <stdio.h>
#include <conio.h>

void bubblesort(int v[], int n){ //functie sortare bubblesort
     int i,j,aux;
     for(i=0; i<n; i++){                                         
              for(j=0; j<n-1; j++){                               
                       if(v[j]>v[j+1]){                           
                                       aux=v[j];                 
                                       v[j]=v[j+1];               
                                       v[j+1]=aux;               
                       }         
              }
     }
}

void permutare(int v[], int n){ //functie de permutare a ultimului element par cu ultimul element al vectorului
    int i=n-1; //egalam contorul i cu ultima pozitie a vectorului
    int aux;
            while(i>=0){ //parcurgem vectorul de la sfarsit la inceput
                        if(v%2==0){ //cautam ultimul element par
                           
                            //am gasit un element par, il permutam cu ultimul element din vector
                            aux=v;
                            v=v[n-1];
                            v[n-1]=aux;
                            //sfarsitul procedeului de permutare
                           
                            i=0; //il egalam pe i cu 0 pentru a iesi din bucla while
                        }
                        i--; //il decrementam pe i pana la sfarsitul vectorului sau pana gasim un element par
            }   
}
int construirevector(int v[], int x){ //umplem vectorul v cu fiecare cifra a numarului nostru x
    int n=0; //contor
    while(x!=0){
       v[n]=x%10;
       x=x/10;
       n++;
    }
     
    return n; //returnam numarul de elemente pe care il are v
}

void rearanjare(int v[], int n){ //rearanjam 0-urile de la inceputul vectorului
     int i=0; //pozitia initiala pentru care contorizam numarul de 0-uri
     while(i<n&&v==0){//aflam cate 0-uri sunt in vectorul nostru sortat crescator
          i++;
     }
     if(i>0){//daca exista 0-uri la inceputul vectorului mutam primul numar nenul la inceputul vectorului si il inlocuim cu 0
         v[0]=v;
         v=0;
     }
}

int nrfinal(int v[], int n){ //functie de reconstruire a unui numar cu elementele din vector
   int nr=0;
   for(int i=0; i<n; i++){
           nr=nr*10;
           nr=nr+v;
   }
   return nr; 
}


int main(){
    int x; //nr tau
    int v[100];//vector numere;
    int n;//contor
    int nr;//numarul nostru final
   
    scanf("%d", &x); //citim nr initial
   
    n=construirevector(v,x); //construim vectorul cu elementele nr initial
    bubblesort(v,n); //sortam vectorul
   
    rearanjare(v,n); //rearanjam 0-urile de la inceputul vectorului :)
    permutare(v,n); //permutam ultimul element par al vectorului cu ultimul element al vectorului
    nr=nrfinal(v,n); //nr=numarul nostru rezultat
    printf("%d", nr); //afisam rezultatul
    getch();
return 0;
}
http://silentzone.ro/ - Tutoriale de tot felul.
Iarta-ma ca perspectiva de a-mi pierde tara ma face trist
cristi-indungi
Membru, skill +1
Membru, skill +1
Posts: 223
Joined: 19 Nov 2014, 12:34
Detinator Steam: Da
CS Status: Tu ce face?? =))
Detinator server CS: da
SteamID: cristiindungi
Fond eXtream: 0
Location: vaslui
Contact:

14 Jan 2015, 18:54

IsTI37 wrote:
cristi-indungi wrote:Ii cu inversu unui nr
Ex:
n=127
inv=721

Iti fac cu algoritm

Inceput
intreg n,inv<=0
Citeste n
Cat timp(n<>0)executa
inv<=inv*10+n mod 10
n<=n div 10
Scrie inv
Sfarsit

C++
#include<iostream>
using namespace std;
int main()
{
int inv,c,n;
inv=0;
cout<<"Numar: ";
cin>>n;
while(n!=0)
{
c=n%10;
inv=inv*10+c;
n=n/10;
}
cout<<"Inversul este "<<inv;
return 0;
}

Sper sa fie bun ce am facut,sau sper sa fie bine ce am zis

Code: Select all

Să se determine cel mai mare număr ce se poate forma cu cifrele lui n. 
Daca faci asa la un test iei maxim jumatate de puncte.
nu am fost atent la tot ce scria
Detalii:
Y!M:[email protected]
My Server
Image[/center]

Download Counter Strike: http://www.girlshare.ro/34498849
User avatar
Ozone
Membru, skill +2
Membru, skill +2
Posts: 626
Joined: 06 Dec 2008, 14:45
Detinator Steam: Da
CS Status: Play hard , or go home !
Detinator server CS: Nu!
Location: Mioveni / Arges
Has thanked: 3 times
Been thanked: 12 times

14 Jan 2015, 20:25

Pui cifrele unui numar in vector. Le ordonezi descrescator. Formezi numarul.
User avatar
QuiteEnough
Membru, skill +1
Membru, skill +1
Posts: 190
Joined: 28 Jul 2014, 12:36
Detinator Steam: Da
CS Status: Everybody lies.
Fond eXtream: 0
Has thanked: 1 time
Been thanked: 2 times
Contact:

14 Jan 2015, 21:16

n poate avea orice valoare, nu trebuie să fie neapărat de 2/3/4 cifre
nu merge cu inversul unui număr, oricum am rezolvat-o cu profesoara :

Code: Select all

 
Am făcut-o în pseudocod cu profesoara.

citeşte n
p = 0
pentru i = 9, 0, -1 executa
   aux = n
   cât timp(aux != 0) executa 
      daca(aux mod 10 = i) atunci p = p*10 + i
      aux = aux div 10

scrie p

Cred că în C++ vine aşa :
#include <iostream>
using namespace std;

int main()
{
    int n, p, i, aux;
    cout<<"n ="; cin>>n;

    for(i=9; 9>=0; i=i-1)
    {
        aux = n;
        while(aux != 0)
        {
            if(aux % 10 == i) p = p*10+i;
            aux = aux/10;
        }
    }

    cout<<p;
    return 0;
}
Mulţumesc pentru ajutor.
Sunt la început, cei care aţi venit cu vectori, nu înteleg nimic.
User avatar
upkunpack
Membru, skill 0
Membru, skill 0
Posts: 41
Joined: 06 Jan 2015, 17:46
Detinator Steam: Da
CS Status: Expert Programmer C++, Delphi 7, .Net.
Detinator server CS: Da
Fond eXtream: 0
Location: C++ Delphi 7 .Net.
Contact:

14 Jan 2015, 21:30

QuiteEnough wrote:n poate avea orice valoare, nu trebuie să fie neapărat de 2/3/4 cifre
nu merge cu inversul unui număr, oricum am rezolvat-o cu profesoara :

Code: Select all

 
Am făcut-o în pseudocod cu profesoara.

citeşte n
p = 0
pentru i = 9, 0, -1 executa
   aux = n
   cât timp(aux != 0) executa 
      daca(aux mod 10 = i) atunci p = p*10 + i
      aux = aux div 10

scrie p

Cred că în C++ vine aşa :
#include <iostream>
using namespace std;

int main()
{
    int n, p, i, aux;
    cout<<"n ="; cin>>n;

    for(i=9; 9>=0; i=i-1)
    {
        aux = n;
        while(aux != 0)
        {
            if(aux % 10 == i) p = p*10+i;
            aux = aux/10;
        }
    }

    cout<<p;
    return 0;
}
Mulţumesc pentru ajutor.
Sunt la început, cei care aţi venit cu vectori, nu înteleg nimic.
Edit, scuze acum am vazut ca ai pus in in engleza :)
BB.PLAYNION.RO # BASEBUILDER
Image
Post Reply

Return to “Discutii generale”

  • Information