PAT A1038 Recuperar el número más pequeño (30 分)

enlaces a los temas : https://pintia.cn/problem-sets/994805342720868352/problems/994805449625288704

题目描述
Dada una colección de segmentos numéricos, se supone que para recuperar el número más pequeño de ellos. Por ejemplo, dada {32, 321, 3214, 0229, 87}, podemos recuperar muchos números tales como 32-321-3214-0229-87 o 0229-32-87-321-3214 con respecto a diferentes órdenes de combinaciones de estos segmentos, y el número más pequeño es 0229-321-3214-32-87.

输入
Cada archivo de entrada contiene un caso de prueba. Cada caso da un número entero positivo N (≤10 ^ 4), seguido de segmentos de número n. Cada segmento contiene un número entero no negativo de no más de 8 dígitos. Todos los números en una línea están separadas por un espacio.

输出
Para cada caso de prueba, imprimir el número más pequeño de una sola línea. Tenga en cuenta que el primer dígito no debe ser cero.

entrada de la muestra
5.323.213.214.022.987

Ejemplo de salida
22932132143287

código

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

const int maxn = 100010;
string str[maxn];

bool cmp(string a, string b) {
	return a + b < b + a;		//如果a + b < b + a;就把a排在前面!
}

int main() {
	int n;
	cin>>n;
	for(int i = 0; i < n; i++)
		cin>>str[i];
	sort(str, str + n, cmp);
	string ans;
	for(int i = 0; i < n; i++) {
		ans += str[i];
	}
	while(ans.size() != 0 && ans[0] == '0')	//只需除去拼接后开头的0;
		ans.erase(ans.begin());
	if(ans.size() == 0)
		cout<< 0;
	else
		cout<< ans;
	return 0;
}
Publicados 288 artículos originales · ganado elogios 12 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/Rhao999/article/details/104747947
Recomendado
Clasificación