VA ROG URGENT DAU COROANA
5. Se consideră un vector x cu n (1<=n<=100) componente de tip longint (long). Se cere să se afișeze numărul cel mai mare format cu prima cifră a fiecărei componente din x.
Exemplu:
Pentru n=4 și componentele
2341 789 1998 2000 se va afișa: 7221
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
long long v[n];
for (int i=0; i<n; i++) {
cin >> v[i];
}
long long a;
int vc[10]={0};
for (int i=0; i<n; i++) {
a=v[i];
while (a>9) {
a/=10;
}
++vc[a];
}
for (int i=9; i>=0; i--) {
if (vc[i]) {
for (int j=1; j<=vc[i]; j++) {
cout << i;
}
}
}
return 0;
}
Explicație:
Am ales pentru numerele din vector tipul long long int, deoarece în c++ tipurile int și long int sunt echivalente...
Se completează vectorul de frecvență a primelor cifre ...
Succese!
Răspuns:
#include <iostream>
using namespace std;
int main()
{
long X[100], AUX[100], n, i, j, aux, nou = 0;
cin >> n;
for(i = 1; i <= n; i++)
AUX[i] = 0;
for(i = 1; i <= n; i++)
cin >> X[i];
int x = 1;
for(i = 1; i <= n; i++){
while(X[i] > 9){
X[i] = X[i] / 10;
}
AUX[x] = X[i] % 10;
x++;
}
for(i = 1; i < n; i++)
for(j = i + 1; j <= n; j++)
if(AUX[i] < AUX[j]){
aux = AUX[i];
AUX[i] = AUX[j];
AUX[j] = aux;
}
for(i = 1; i <= n; i++)
nou = nou * 10 + AUX[i] % 10;
cout << nou;
return 0;
}
Explicație:
Citim vectorul, dar inainte de asta initializam un vector AUXILIAR cu toate elementele 0.
In al 3-lea for taiem toate cifrele numarului pana la ultimul, apoi il bagam intr-un AUX[x], unde x e initial 1 si creste mereu, adica o sa fie in final aceeasi valoare cu n.
Urmatorul pas este sa ordonam descrescator elementele noului vector si sa creem numarul.
Vectorul ordonat o sa fie 7 2 2 1, apoi incepem sa construim: nou = 0 + 7
nou = 7 * 10 + 2 = 72 etc