Problema 2
La entrada se divide en dos partes: primero, ingrese el número de dígitos n, y luego ingrese n números del 0 al 1000. En la salida, los dígitos se ordenan en orden de suma y descendente. Si los dígitos del número son iguales, se ordenarán en orden ascendente de acuerdo con el tamaño de los n números.
Entrada:
5
101 100999 1234 110
Salida:
999 27
1234
10101
2110
2100 1
———————————————————————————— —— ———————————
El método que pensé al principio no se correspondía con la salida, solo podía sumar y ordenar cada dígito, pero después de ordenar, se encontró que no coincidía con el número original.
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
bool compare(int a, int b)
{
return a > b;
}
int main()
{
int n, a[10001], y[10001];
int x, b, c, d, e;
cin>>n;
for(int i = 0; i < n; i++)
{
cin>>a[i];
x = a[i] / 10000;
b = a[i] / 1000 % 10;
c = a[i] / 100 % 10;
d = a[i] / 10 % 10;
e = a[i] % 10;
y[i] = x + b + c + d + e;
//cout<<x<<"-"<<b<<"-"<<c<<"-"<<d<<"-"<<e<<endl;
}
sort(y, y + n, compare);
for(int i = 0; i < n; i++)
cout<<a[i]<<" "<<y[i]<<endl;
return 0;
}
Mejorado:
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
/*
bool compare(int a, int b)
{
return a > b;
}
*/
int main()
{
int n, a[10001], y[10001];
int x, b, c, d, e, v, m;
cin>>n;
for(int i = 0; i < n; i++)
{
cin>>a[i];
x = a[i] / 10000;
b = a[i] / 1000 % 10;
c = a[i] / 100 % 10;
d = a[i] / 10 % 10;
e = a[i] % 10;
y[i] = x + b + c + d + e;
//cout<<x<<"-"<<b<<"-"<<c<<"-"<<d<<"-"<<e<<endl;
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
if((y[i] > y[j]) || (y[i] == y[j] && a[i] < a[j]))
{
v = a[i];
a[i] = a[j];
a[j] = v;
m = y[i];
y[i] = y[j];
y[j] = m;
}
}
}
for(int i = 0; i < n; i++)
cout<<a[i]<<" "<<y[i]<<endl;
return 0;
}
También encontré que la parte del medio parece simplificada y es un poco engorroso escribir de esa manera.
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
int shu(int a)
{
int sum = 0;
while(a != 0)
{
sum = sum + a % 10;
a = a / 10;
}
return sum;
}
int main()
{
int n, a[10001], y[10001];
int x, b, c, d, e, v, m;
cin>>n;
for(int i = 0; i < n; i++)
{
cin>>a[i];
y[i] = shu(a[i]);
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
if((y[i] > y[j]) || (y[i] == y[j] && a[i] < a[j]))
{
v = a[i];
a[i] = a[j];
a[j] = v;
m = y[i];
y[i] = y[j];
y[j] = m;
}
}
}
for(int i = 0; i < n; i++)
cout<<a[i]<<" "<<y[i]<<endl;
return 0;
}