Pagini recente » Diferente pentru problema/veri intre reviziile 4 si 9 | Diferente pentru problema/veri intre reviziile 3 si 9 | Cod sursa (job #3359782) | Cod sursa (job #3359781) | Cod sursa (job #3358316)
#include <iostream>
using namespace std;
struct node{
int val;
node* next;
node(int v=0): val(v), next(nullptr){}
};
struct coada{
node* start=nullptr;
node* finish=nullptr;
};
void push(coada &c, int val){
if(c.start){
c.finish->next=new node(val);
c.finish=c.finish->next;
}
else{
c.start=new node(val);
c.finish = c.start;
}
}
void pop(coada &c){
if(c.start==nullptr) return;
node* p=c.start;
c.start=c.start->next;
if(c.start==nullptr){c.finish=nullptr;}
delete p;
}
bool empty(coada& c){
if(c.start==nullptr) return true;
return false;
}
int front(coada& c){
if(c.start!=nullptr)
return c.start->val;
return 0;
}
int main(){
int n, x, maxim=-1;
int v[500000];
coada c[10];
cin>>n;
for(int i=0; i<n; i++){
cin>>x;
v[i]=x;
if(x>maxim) maxim=x;
}
int p=1;
while(p<=maxim){
for(int i=0; i<n; i++){
push(c[(v[i]/p)%10],v[i]);
}
// golim vectorul
for(int i=0; i<n; i++) v[i]=0;
int nr=0;
for(int i=0; i<10; i++){
coada& q=c[i];
while(!empty(q)){
v[nr]=front(q);
pop(q);
nr++;
}
}
p*=10;
}
for(int i=0; i<n; i++){
cout<<v[i]<<' ';
}
return 0;
}