Inregistrare

Inregistrati-va pentru a beneficia de cunostintele comunitatii, a pune intrebari sau a a raspunde la intrebarilor celorlalti.

Suntem o comunitate care incurajeaza educatia si in care se intalnesc know-how-ul si experienta cu perspective inovative de abordare a problemelor.

Aveti deja cont ? Login


Aveti deja cont ? Autentificare

Login

Autentificati-va pentru a pune intrebari, a raspunde la intrebarilor celorlalti sau pentru a va conecta cu prietenii.

Inregistrare

Resetare parola?

Nu aveti cont ? Inregistrare

Resetare parola

V-ati uitat parola ? Introduceti adresa de email si veti primi o noua parola.

Aveti deja cont ? Autentificare

Va rugam sa va autentificati.

Resetare parola?

Nu aveti cont ? Inregistrare

Please briefly explain why you feel this question should be reported.

Va rugam explicate, pe scurt, de ce credeti ca aceasta intrebare trebuie raportata.

Motivul pentru care raportezi utilizatorul.

LoginInregistrare

AniDeȘcoală.ro

AniDeȘcoală.ro Logo AniDeȘcoală.ro Logo

AniDeȘcoală.ro Navigation

  • TEME
  • FUN
  • SCOALA
  • DEX
  • PARENTING
CAUTA
PUNE O INTREBARE

Mobile menu

Inchide
PUNE O INTREBARE
  • HOME
  • TEME
    • Matematica
    • Limba romana
    •  Istorie
    •  Chimie
    • Biologie
    • Geografie
    •  Fizica
    • Informatica
    • Limbi straine
      • Engleza
      • Franceza
      • Germana
      • Altele
    • Diverse
    • Provocari
  • FUN
    • Povești pentru copii
      • Povesti nemuritoare
      • Povesti scurte cu talc
      • Alexandru Mitru
      • Anton Pann
      • Calin Gruia
      • Constanta Nitescu
      • Dumitru Almas
      • Elia David
      • Emil Garleanu
      • Grigore Alexandrescu
      • Ion Creanga
      • Ion Luca Caragiale
      • Marcela Penes
      • Marin Sorescu
      • Petre Ispirescu
      • Victor Eftimiu
      • Alti autori romani
      • Autori straini
        • Antoine de Saint Exupery
        • Charles Perrault
        • Edmondo de Amicis
        • Erika Scheuering
        • Esop
        • Felix Salten
        • Fraţii Grimm
        • Hans Christian Andersen
        • Jean de la Fontaine
        • Johanna Spyri
        • Lev Nicolaevici Tolstoi
        • Rudyard Kipling
        • Virginia Waters
        • Alti autori straini
    • Poezii
      • Grigore Vieru
      • Elena Farago
      • George Toparceanu
      • George Cosbuc
      • Mihai Eminescu
      • Nicolae Labis
      • Otilia Cazimir
      • Tudor Arghezi
      • Vasile Alecsandri
      • Alti autori
    • Stiati ca...
      • Romania
      • Sistemul solar
      • Plante
      • Animale
      • Superlative geografice
      • Altele
    • Citate celebre
    • Proverbe
    • Ghicitori
    • Glume si bancuri
    • Teste de cultura generala
    • Teste de personalitate
    • Probleme distractive
    • Activitati educative
    • Sfaturi practice
    • Planșe de colorat
    • Jocuri in aer liber
    • Abilitati practice
    • Jocuri distractive
    • Cantece pentru copii
    • Codul bunelor maniere
  • SCOALA
    • Matematica
      • Formule Algebra
      • Formule Geometrie
      • Formule Analiza
    • Gramatica
      • Stii sa scrii ?!
      • Părți de propoziție
      • Părți de vorbire
      • Cazurile
      • Sintaxa
      • Diverse
    • Limba romana
      • Bacalaureat
      • Abecedar
    • Cultura generala
  • IARNA
    • Colinde pentru copii
    • Povești de iarnă
    • Povești de Crăciun
    • Craciunul ... ce, cum, cand ?
  • DEX
  • PARENTING
  • PUNCTE SI RANGURI
  • FAQ
  • CONTACT
Home/ Intrebari/Q 84998
Urmator
In Process
diana.boncoi
diana.boncoiuser (0)
Pe: 16 ianuarie 20142014-01-16T18:04:24+02:00 2014-01-16T18:04:24+02:00In: InformaticaIn: Clasele IX-XII

program c++

Se citeste un numar cu n cifre. Sa se afiseze cel mai mic numar par care se poate forma cu cifrele acestui numar.
Multumesc anticipat 😀

  • 0
  • 88
  • 0
  • Share
    • Share peFacebook
    • Share pe Twitter
    • Share pe WhatsApp

Similare

  • Identificati 5 tipuri de probleme din cadrul ...
  • Help!! Cum ar trebuii sa arate liniile ...
  • Ajutor, va rog frumos! 1. Create an ...
  • Se dau doi vectori u si v ...
  • Ce sunt obiectele? Cum se introduc obiectele? ...
  • O banca isi gestioneaza imprumuturile cu ajutorul ...

8 raspunsuri

  1. xor_NTG maestru (V)
    2014-01-20T20:43:20+02:00A raspuns pe 20 ianuarie 2014 la 8:43 PM

    Problema nu pare grea, dar necesita totusi atentie, ca orice alte probleme.

    Cel mai mic numar care poate fi format din cifrele unui numar, este de fapt numarul format din cifrele numarului considerat, ordonate crescator.

    Spre exemplu, daca avem x = 43251, cel mai mic numar ce poate fi format cu cifrele lui x este 12345.

    Cam asta ar fi ideea de rezolvare. Mai concret, o „spargere” a numarului, o stocare a cifrelor numarului intr-un vector, urmata de o sortare a vectorului si apoi de o construire a numarului nou format (sau o afisare directa a numarului)

    Cu acest procedeu ar trebui sa incepi. Apoi, ne uitam la conditia impusa de problema. Spune ca trebuie determinat cel mai mic numar par. Asta inseamna ca ultima cifra a numarului cel mai mic (format din cifrele lui n, cum am explicat mai sus) trebuie neaparat sa fie para.

    Acest lucru se poate intampla „de sus”, adica daca ai un numar format doar din cifre pare, sau cea mai mare cifra sa fie para, imediat faci numarul minim, si sigur numarul e par.

    Daca numarul minim nu e par, el sigur trebuie sa aiba o cifra para, altfel nu ar mai avea sens cerinta. Pentru a obtine numarul par cautat, trebuie interschimbata ultima cifra (care e impara) cu cea mai mare cifra para a numarului. Deci mergi inapoi in vector pana cand intalnesti o cifra para. Evident, vectorul e sortat si prima cifra para pe care o intalnesti e si cea mai mare, deci o interschimbi cu ultima.

    Concret:

    x-ul de mai sus, devine prin sortare: 12345, ultima cifra e impara, deci suntem pe cazul „nashpa”, in care evident, interschimbam 4 (cea mai mare cifra para) cu 5, si obtinem 12354, care convine.

    Alt exemplu: 123034. Aici…avem acel zero, deci o sa puna probleme la sortare, pentru ca va deveni 012334. Va trebui interschimbat acel zero, cu prima cifra nenula din vector, pentru ca putem avea 00001234, deci daca o interschimbam doar cu a doua cifra, era posibil sa fie aceeasi situatiune.

    Nu stiu exact ce cazuri ar mai putea fi…dar in principal, asta ar fi ideea de rezolvare, sau cel putin asa as rezolva eu.

    Implementarea efectiva a programului se va realiza pe baza observatiilor de mai sus, de catre dvs.

    • 0
    • Raspunde
  2. crs12decoder user (0)
    2014-01-31T21:39:55+02:00A raspuns pe 31 ianuarie 2014 la 9:39 PM

    Cum a zis xor_NTG

    Cel mai mic numar pe care il poti forma cu numarul tau => cifrele lui sortate crescator.

    Ca sa fie par => ultima cifra para permutata cu ultima cifra.
    +Rearanjarea zerourilor de la inceput dupa ce vectorul a fost sortat=> primul element nenul de la inceputul vectorului pus in pozitia 0 a vectorului si egalam cu 0 acest numar pe pozitia pe care se afla anterior.

    Programul arata asa:

    #include <stdio.h>
    	#include <conio.h>
    	
    	void bubblesort&#40;int v&#91;&#93;, int n&#41;&#123; //functie sortare bubblesort
    	     int i,j,aux;
    	     for&#40;i=0; i<n; i++&#41;&#123;
    	              for&#40;j=0; j<n-1; j++&#41;&#123;
    	                       if&#40;v&#91;j&#93;>v&#91;j+1&#93;&#41;&#123;
    	                                       aux=v&#91;j&#93;;
    	                                       v&#91;j&#93;=v&#91;j+1&#93;;
    	                                       v&#91;j+1&#93;=aux;
    	                       &#125;
    	              &#125;
    	     &#125;
    	&#125;
    	
    	void permutare&#40;int v&#91;&#93;, int n&#41;&#123; //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&#40;i>=0&#41;&#123; //parcurgem vectorul de la sfarsit la inceput
    	                        if&#40;v&#91;i&#93;%2==0&#41;&#123; //cautam ultimul element par
    	
    	                            //am gasit un element par, il permutam cu ultimul element din vector
    	                            aux=v&#91;i&#93;;
    	                            v&#91;i&#93;=v&#91;n-1&#93;;
    	                            v&#91;n-1&#93;=aux;
    	                            //sfarsitul procedeului de permutare
    	
    	                            i=0; //il egalam pe i cu 0 pentru a iesi din bucla while
    	                        &#125;
    	                        i--; //il decrementam pe i pana la sfarsitul vectorului sau pana gasim un element par
    	            &#125;
    	&#125;
    	int construirevector&#40;int v&#91;&#93;, int x&#41;&#123; //umplem vectorul v cu fiecare cifra a numarului nostru x
    	    int n=0; //contor
    	    while&#40;x!=0&#41;&#123;
    	       v&#91;n&#93;=x%10;
    	       x=x/10;
    	       n++;
    	    &#125;
    	
    	    return n; //returnam numarul de elemente pe care il are v
    	&#125;
    	
    	void rearanjare&#40;int v&#91;&#93;, int n&#41;&#123; //rearanjam 0-urile de la inceputul vectorului
    	     int i=0; //pozitia initiala pentru care contorizam numarul de 0-uri
    	     while&#40;i<n&&v&#91;i&#93;==0&#41;&#123;//aflam cate 0-uri sunt in vectorul nostru sortat crescator
    	          i++;
    	     &#125;
    	     if&#40;i>0&#41;&#123;//daca exista 0-uri la inceputul vectorului mutam primul numar nenul la inceputul vectorului si il inlocuim cu 0
    	         v&#91;0&#93;=v&#91;i&#93;;
    	         v&#91;i&#93;=0;
    	     &#125;
    	&#125;
    	
    	int nrfinal&#40;int v&#91;&#93;, int n&#41;&#123; //functie de reconstruire a unui numar cu elementele din vector
    	   int nr=0;
    	   for&#40;int i=0; i<n; i++&#41;&#123;
    	           nr=nr*10;
    	           nr=nr+v&#91;i&#93;;
    	   &#125;
    	   return nr;
    	&#125;
    	
    	
    	int main&#40;&#41;&#123;
    	    int x; //nr tau
    	    int v&#91;100&#93;;//vector numere;
    	    int n;//contor
    	    int nr;//numarul nostru final
    	
    	    scanf&#40;"%d", &x&#41;; //citim nr initial
    	
    	    n=construirevector&#40;v,x&#41;; //construim vectorul cu elementele nr initial
    	    bubblesort&#40;v,n&#41;; //sortam vectorul
    	
    	    rearanjare&#40;v,n&#41;; //rearanjam 0-urile de la inceputul vectorului &#58;&#41;
    	    permutare&#40;v,n&#41;; //permutam ultimul element par al vectorului cu ultimul element al vectorului
    	    nr=nrfinal&#40;v,n&#41;; //nr=numarul nostru rezultat
    	    printf&#40;"%d", nr&#41;; //afisam rezultatul
    	    getch&#40;&#41;;
    	return 0;
    	&#125;
    	

    • 0
    • Raspunde
  3. xor_NTG maestru (V)
    2014-01-31T21:56:29+02:00A raspuns pe 31 ianuarie 2014 la 9:56 PM

    In principiu, cam asa ar arata. Dar ce iti afisaza pentru 14098?

    • 0
    • Raspunde
  4. crs12decoder user (0)
    2014-02-01T04:32:02+02:00A raspuns pe 1 februarie 2014 la 4:32 AM

    My bad. Am uitat de 0-uri. Am rectificat. Multumesc!

    • 0
    • Raspunde
  5. xor_NTG maestru (V)
    2014-02-01T09:31:22+02:00A raspuns pe 1 februarie 2014 la 9:31 AM

    Acum e perfect. Felicitari! Hai sa mergem mai departe, si sa vedem ce putem optimiza la acest algoritm.

    Sugestii?

    • 0
    • Raspunde
  6. crs12decoder user (0)
    2014-02-01T16:43:20+02:00A raspuns pe 1 februarie 2014 la 4:43 PM

    Daca avem de aplicat procedeul asupra unui numar imens de elemente putem folosi quicksort sau heapsort in loc de bubblesort pentru ca in principiu functia de sortare consuma cele mai multe resurse iar solutia bubblesort a fost una simpla si mai usor de inteles desi avea complexitatea O(n^2) in toate cazurile cu exceptia cazului in care vectorul era deja sortat si avea complexitatea O(n).

    In rest pentru functia „nrfinal” de reconstruire a unui integer dupa elementele vectorului putem face nr=nr*10+v; ca sa nu facem o atribuire in plus cum am facut anterior, atribuire care este o operatie critica in cadrul functiei nrfinal.
    Evident ca putem ca in cadrul functiei main sa afisam numarul direct prin apelul functiei nrfinal fara sa atribuim variabilei nr valoarea returnata de functie si apoi sa afisam nr. Cu toate astea am vrut sa fie mai clar ca rezultatul va fi stocat in acea variabila declarata la inceput, fapt care nu aduce decat o operatie necritica in plus si consuma putina memorie in plus.
    Puteam de asemenea sa folosim alocare dinamica pentru vectorul v[].

    Daca mai sunt si alte modificari euristice ce pot fi aduse la programul facut dupa abordarea propusa de xor_NTG va rog, postati.

    As fi curios totusi sa vad si o alta abordare mai interesanta si mai directa a problemei daca gaseste cineva.

    • 0
    • Raspunde
  7. xor_NTG maestru (V)
    2014-02-01T19:02:33+02:00A raspuns pe 1 februarie 2014 la 7:02 PM

    Un inceput excelent…acea functie de sortare trebuie transformata intr-una mai rapida.

    La procedeul de interschimbare (folosit de 2 ori in cadrul programului), putem folosi un xor-swap: http://en.wikipedia.org/wiki/XOR_swap_algorithm

    Un fel de optimizare ar putea fi considerata afisarea directa a vectorului, care prin unirea elementelor componente ar forma numarul cautat (deci practic evitarea functiei nrfinal). Daca problema spune „sa se afiseze…”, atunci da, asta ar putea fi o metoda de optimizare, pentru ca se afisaza numarul (chiar daca e disociat in componentele unui vector). Daca insa spune: „sa se construiasca numarul obtinut si sa se afiseze”, atunci in mod inevitabil trebuie utilizata acea functie.

    Cam asa as face eu…

    • 0
    • Raspunde
  8. crs12decoder user (0)
    2014-02-01T19:07:49+02:00A raspuns pe 1 februarie 2014 la 7:07 PM

    xor_NTG wrote: Un fel de optimizare ar putea fi considerata afisarea directa a vectorului, care prin unirea elementelor componente ar forma numarul cautat (deci practic evitarea functiei nrfinal). Daca problema spune „sa se afiseze…”, atunci da, asta ar putea fi o metoda de optimizare, pentru ca se afisaza numarul (chiar daca e disociat in componentele unui vector). Daca insa spune: „sa se construiasca numarul obtinut si sa se afiseze”, atunci in mod inevitabil trebuie utilizata acea functie.

    Depinde cum este interpretat enuntul.
    Intr-adevar daca este afisat vectorul direct, el pare a fi un numar. Cu toate astea se zice a afisa un numar si nu elementele unui vector.
    Dar evident rezultatul vizual va fi identic deci da, se poate renunta si la reconstituire.

    • 0
    • Raspunde
Raspunde

Raspunde
Anulează răspunsul


Sidebar

PUNE O INTREBARE
  • IARNA
    • Colinde pentru copii
    • Povești de iarnă
    • Povești de Crăciun
    • Craciunul ... ce, cum, cand ?
  • FUN
    • Povești pentru copii
    • Povesti scurte cu talc
    • Povesti nemuritoare
    • Poezii
    • Stiati ca...
    • Citate celebre
    • Proverbe
    • Ghicitori
    • Glume si bancuri
  • SCOALA
    • Matematica
      • Formule Algebra
      • Formule Geometrie
      • Formule Analiza
    • Stii sa scrii ?!
    • Comentarii si rezumate
    • Cultura generala

Explore

  • Matematica
  • Limba romana
  •  Istorie
  •  Chimie
  • Biologie
  • Geografie
  •  Fizica
  • Informatica
  • Limbi straine
    • Engleza
    • Franceza
    • Germana
    • Altele
  • Diverse
  • Provocari

Footer

Despre noi

Platforma educationala pentru copii, parinti si profesori. Pune intrebari si primeste raspunsuri de la profesori si utilizatori experimentati. Transmite sugestii, povesti, articole etc.

Utile

  • Puncte si Ranguri
  • FAQ
  • Termeni și condiţii
  • Contact

Proiecte

  • Parenting
  • Dictionar explicativ
  • Matematica
  • Gramatica limbii romane
  • Trafic

Statistici

  • Intrebari : 30.739
  • Raspunsuri : 69.948
  • Best Answers : 394
  • Articole : 5.226
  • Comentarii : 15.429

Inserează/editează legătura

Introdu URL-ul de destinație

Sau leagă-te la conținutul existent

    Nu ai specificat niciun termen de căutare. Arăt elementele recente. Căută sau folosește tastele săgeată sus și jos pentru a selecta un element.