Anton y que todos conocemos moneda ------ 贪心

Berland, 2016. El tipo de cambio de moneda que todos conocemos en contra de la burle ha aumentado tanto que para simplificar los cálculos, su parte fraccionaria se descuida y el tipo de cambio ahora se supone que es un entero.

Fuentes fidedignas han informado a la Anton financiero de alguna información sobre el tipo de cambio de moneda que todos conocemos en contra de la burle para mañana. Ahora Anton sabe que mañana el tipo de cambio será un número par, que se puede obtener a partir de la tasa actual mediante el canje de dos dígitos distintos exactamente en el mismo. De todos los posibles valores que cumplen estas condiciones, el tipo de cambio para mañana será la máxima posible. Está garantizado que en la actualidad la tasa de cambio es un entero positivo n impar. Ayuda Anton para determinar el tipo de cambio de moneda que todos conocemos para mañana!

Entrada
La primera línea contiene un entero positivo impar n - el tipo de cambio de moneda que todos conocemos hoy. La longitud de la representación número de n está dentro de intervalo de 2 a 105, inclusive. La representación de n no contiene ceros a la izquierda.

Salida
Si la información sobre el tipo de cambio de mañana es inconsistente, es decir, no hay ningún número entero que satisface la condición, de impresión - 1.

De lo contrario, imprima el tipo de cambio de moneda que todos saben contra el burle para mañana. Este debería ser el máximo número posible de aquellas que son aún y que se obtienen de la tasa de cambio de hoy mediante el canje de exactamente dos dígitos. la representación del tipo de cambio no debe contener ceros a la izquierda.

Ejemplos
de entrada
527
de salida
572

Entrada
4573
Salida
3574

Input
1357997531
salida
-1

El significado de los problemas

Una n impar, en el que dos de cambio diferente, por lo que se convierte en un número par, este número es el mayor número de búsqueda

pensamiento

La idea es muy simple, casi fuera de la cuestión de lectura, hizo varios conjuntos de datos intentó y encontró factible. Esto es lo que considero el intercambio de palabras, es sin duda una prioridad alta, sino también para asegurar que el número llega a ser grande. Así se recorre de arriba hacia abajo, para averiguar incluso, si es el último de la relación de canje es pequeña, si ha estado en el último número aún no menor que la anterior, entonces y finalmente un intercambio incluso

código

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = 1e5 + 10;
int main()
{
	char s[N];
	int a[N];
	cin >> s ;
	int n = strlen(s);
	int k = 0;
	int t;
	for (int i = 0; i < n; i++)
	{
		if (s[i] % 2 == 1)
		{
			a[i] = 1;
			k++;//奇数个数
		}
		else
		{
			a[i] = 0;//标记偶数
			t = i;
		}
	}
	if (k == n) 
	{
		cout << "-1" << endl;
		return 0;
	}
	for (int i = 0; i < n - 1; i++)
	{
		if (a[i] == 0 && s[i] < s[n - 1])//判断偶数与最后一位的大小
		{
			swap(s[i], s[n - 1]);
			break;
		}
		else if (i == t)swap(s[i], s[n - 1]);//偶数都大于等于最后一位
	}
	for (int i = 0; i < n; i++)
		cout << s[i];
	return 0;
}
Publicado 27 artículos originales · alabanza ganado 30 · vistas 2818

Supongo que te gusta

Origin blog.csdn.net/SDAU_LGX/article/details/104942581
Recomendado
Clasificación