[TEMÃ] Aranjare cifre in ordine crescatoare.
Last Updated: Oct 15 2013 19:14, Started by
DaFuQ
, Oct 12 2013 20:58
·
0
#1
Posted 12 October 2013 - 20:58
Salut, sora mea e pe clasa a 9-a si fiind incepatoare nu stie ce sunt aia vectori, array sau functii si are de facut o problema in care sa aranjeze cifrele unui numar in ordine crescatoare, stie doar buclele while(), if() si for().
Am incercat sa o ajut dar nu-mi iese nici mie, daca puteam folosi un array era mult mai usor, imi puteti da o idee? |
#2
Posted 12 October 2013 - 21:09
Foloseste-te de / (divide) si % (modulo) pt. a ciordi cifrele din numar. Apoi vezi tu cum faci cu un if ceva sa le sortezi
|
#3
Posted 12 October 2013 - 21:11
Am facut deja asta, dar nu sorteaza orice numar, doar unele...
aux=c%10; c=c/10; while(c!=0) { if(c%10>aux) { n=n*10+aux; aux=c%10; } else { n=n*10+c%10; } c=c/10; } n=n*10+aux; cout<<n; PS: Stim ca numarul este format din cifre distincte. |
#4
Posted 12 October 2013 - 22:19
Aplica BubbleSort numai ca in loc sa folosesti arrays foloseste cum a spus un coleg mai sus operatorii % si / si compune numarul sortat in alta variabila.
|
#5
Posted 13 October 2013 - 12:18
pai codul scris de tine nu sorteaza orice numar deoarece tu sortezi cifrele in functie de ultima cifra...
hai sa iti pun cum as face eu, dar nu sunt sigur ca merge....tu ai zis ca cifrele numarului sunt diferite. calculezi cifra minima a numarului si o introduci in alta variabila unde vei forma numarul cu cifrele in ordine crescatoare, dupaia elimini minumul din numarul care ti se da si tot asa pana cand numarul dat ajunge 0. asta ar fi o varianta, care daca o faci bine ar trebui sa mearga (zic eu) dar nu stiu daca e si cea mai eficienta. |
#6
Posted 13 October 2013 - 12:46
Pas 1: pune-o să scrie codul care, dat fiind un număr n, iterează toate cifrele din număr şi le afişează, cifră cu cifră
Pas 2: pune-o să extindă codul de la Pas 1 aşa încât în loc de afişarea cifrei, să itereze un array a prealocat şi să insereze cifra c la poziţia i din array pentru care condiţia asta e adevărată: a[i-1] <= c && c < a[i+1] - mă rog, cu tratarea micii excepţii în care cifra c trebuie inserată la coadă, deoarece e cea mai mare (read: insertion sort, dacă a auzit de el, dar folosind doar partea online a algoritmului, dacă le-a spus ce e aia un "online algorithm"). PS: iterarea array-ului de la coadă la cap simplifică inserarea. |
#7
Posted 13 October 2013 - 12:58
Nu are voie cu array, deabia a invatat buclele while(), for() si if(), nu a invatat nici do while(). Problema cap-coada zice asa: Se citeste de la tastatura un numar n, sa i se afiseze toate cifrele distincte in ordine crescatoare. Exemplu: n=111329 , rezultatul=1239 . Pana acum a reusit sa aleaga cifrele distincte, dar sa le ordoneze nu stie, nici eu nu-mi dau seama cum as putea fara array.
Edited by DaFuQ, 13 October 2013 - 12:59. |
#8
Posted 13 October 2013 - 13:01
Nu stie nici ce-i ala array, si tu vrei sa stie de algoritmi online, pe care oricum ma indoiesc ca va afla vreodata de la liceu?
@initiator: simplu si ineficient: cauti cifra maxima*, o stergi din numar, o adaugi la sfarsitul altui numar, initial 0, in care vei forma numarul sortat. * sau minima, depinde cum vrei sa sortezi |
#9
Posted 13 October 2013 - 13:08
Două bucle imbricate: iterează cifrele existente atunci {0,1,2,3,4,5,6,7,8,9}, şi în interior iterează cifrele numărului. Când se potrivesc, afişare + break.
Gady_paul, on 13 octombrie 2013 - 13:01, said:
Nu stie nici ce-i ala array, si tu vrei sa stie de algoritmi online, pe care oricum ma indoiesc ca va afla vreodata de la liceu? Gady_paul, on 13 octombrie 2013 - 13:01, said:
@initiator: simplu si ineficient: cauti cifra maxima*, o stergi din numar, o adaugi la sfarsitul altui numar, initial 0, in care vei forma numarul sortat. |
#10
Posted 15 October 2013 - 10:04
DaFuQ, on 12 octombrie 2013 - 20:58, said:
Salut, sora mea e pe clasa a 9-a si fiind incepatoare nu stie ce sunt aia vectori, array sau functii si are de facut o problema in care sa aranjeze cifrele unui numar in ordine crescatoare, stie doar buclele while(), if() si for(). Am incercat sa o ajut dar nu-mi iese nici mie, daca puteam folosi un array era mult mai usor, imi puteti da o idee? ... pentru surioara ta. #include "stdafx.h" using namespace std; int main(){ int numar, i; cout << "introdu numarul:" << endl; cin >> numar; for(i=0; i<10; i++){ int val = numar; while(val>0){ int cifra = val%10; val /= 10; if(i == cifra){ cout << cifra; break; } } } cout << endl; } PS: vezi ca am pus iostream-ul unde ii e locul, adica in "stdafx.h". Edited by Heto, 15 October 2013 - 10:10. |
|
#11
Posted 15 October 2013 - 10:35
Pentru numere "mici" si numere mai lungi de 9 cifre:
//#include <iostream> using namespace std; int main(){ long int numar; int i; cout << "introdu numarul:" << endl; cin >> numar; for(i=0; i<10; i++){ long int val = numar; while(val>0){ int cifra = val%10; val /= 10; if(i == cifra){ cout << cifra; break; } } } cout << endl; return 0; } Edited by poadol, 15 October 2013 - 10:39. |
#12
Posted 15 October 2013 - 11:30
poadol, on 15 octombrie 2013 - 10:35, said:
Pentru numere "mici" si numere mai lungi de 9 cifre: [CODE] Bine ca esti tu destept... da-o-n spanac de treaba, diferenta reala dintre ce ai scris tu si ce am scris eu, pe windows(32-bit si 64-bit) si pe linux(32-bit) este 0. Daca vrei cifre atat de mari cat sa nu fie cuprinse intr-un int, atunci il declari ca sir de caractere, dar nu e cazul pentru ce avem noi aici. Edited by Heto, 15 October 2013 - 11:43. |
#13
Posted 15 October 2013 - 13:58
#14
Posted 15 October 2013 - 16:53
Heto, on 15 octombrie 2013 - 11:30, said:
Bine ca esti tu destept... da-o-n spanac de treaba, diferenta reala dintre ce ai scris tu si ce am scris eu, pe windows(32-bit si 64-bit) si pe linux(32-bit) este 0. Daca vrei cifre atat de mari cat sa nu fie cuprinse intr-un int, atunci il declari ca sir de caractere, dar nu e cazul pentru ce avem noi aici. plus ca a mea este doar o precizare ( nu este o corectie* cum gresit ai inteles ). Este vina mea trebuia sa fiu cat mai explicit posibil, pentru intelegerea corecta a ceea ce am adaugat eu (necesar doar la numere mai mari de 9 cifre, care "mananca" mai multa memorie) la codul scris de tine. CORECȚIE* - Corectare, îndreptare. Edited by poadol, 15 October 2013 - 17:02. |
#15
Posted 15 October 2013 - 18:51
poadol, on 15 octombrie 2013 - 16:53, said:
plus ca a mea este doar o precizare si eu ti-am explicat ca nu e nicio precizare int-ul are 4 bytes, long-ul are 4 bytes. Asta pe orice Windows(32-bit si 64-bit) si pe orice linux(32-bit) pe linuxul de 64-bit apare diferenta. In rest mananca aceeasi memorie si acopera exact aceleasi numere. Macar de puneai unsigned int, aia era o precizare... |
|
#16
Posted 15 October 2013 - 19:14
Heto, on 15 octombrie 2013 - 10:04, said:
... pentru surioara ta. Ai warn (de 0 puncte deocamdată, o consemnare formală mai mult, deoarece sper că te vei îndrepta). Quote
Toate subiectele despre teme nu vor primi soluţii complete, funcţionale, la probleme, ci doar indicii în limba română şi/sau secvenţe de cod pe care creatorul topicului va trebui să le înţeleagă şi să le preia în propria sa soluţie Vei citi şi de acum înainte vei respecta regulamentul ariei Programming. poadol, on 15 octombrie 2013 - 10:35, said:
Pentru numere "mici" si numere mai lungi de 9 cifre: |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users