Implementación de C ++ de número mínimo simple

1. Descripción del título

Inserte la descripción de la imagen aquí

Dos ideas para resolver problemas

Una forma sencilla de resolver este problema es juzgar cada dígito por turno de izquierda a derecha. Si el dígito en ese dígito es mayor que el dígito en el siguiente dígito, borre el dígito en esa posición y luego regrese al principio para continuar. Ejecución La operación de juicio, después de eliminar suficientes k bits, trata con el posible 0 al principio para obtener el resultado. Si ningún número es mayor que su último dígito, es decir, no se puede eliminar comparando el tamaño, y el número de dígitos eliminados es menor que k, luego elimine de atrás hacia adelante hasta que se eliminen k dígitos, y trate con los posibles 0 al principio., Puede obtener el resultado.

Los ejemplos son los siguientes:

n = 5, k = 3;
a = 21053;

El primer juicio: 2 es mayor que 1, elimine 2, obtenga 1053 y continúe desde el principio.
El segundo juicio: 1 es mayor que 0, borre 1 para obtener 053 y continúe desde el principio.
El tercer juicio: 5 es mayor que 3, elimine 5 y obtenga 03.
Se han eliminado suficientes k bits y el resultado es 3.

n = 6, k = 4;
a = 103289;

El primer juicio: 1 es mayor que 0, borre 1, obtenga 03289 y continúe desde el principio.
El segundo juicio: 3 es mayor que 2, elimine 3, obtenga 0289 y continúe desde el principio.
El tercer juicio: ningún número es mayor que su último dígito, pero no se han eliminado suficientes k dígitos, por lo que 9 y 8 se eliminan de atrás hacia adelante, y el resultado es 02 y la salida es 2.

Tres, implementación de código

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    
    
	int n, k = 0;
	vector<char> vec;
	string s = "";
	while(cin>>n>>k)
	{
    
    
		cin >> s;
		vec.resize(s.size());
		for(int i=0; i<s.size(); ++i)
		{
    
    
			vec[i] = s[i];
		}
		
		for(int i=0; i<vec.size()&&k>0; ++i)   //判断数字大小,如果某个数字比它得后一位大,则删掉这个数字 
		{
    
    
			if(vec[i]>vec[i+1])
			{
    
    
				vec.erase(vec.begin()+i,vec.begin()+i+1);
				k--;
				i=-1;    //删掉较大数后从头继续 
			}
		}
		
		while(k--) //如果循环操作没有删够 k 位,则从后往前删够 k 位 
		{
    
    
			vec.erase(vec.end()-1,vec.end());
		}
		
		while(vec[0]=='0'&&vec.size()!=0)  //处理开头的 0  
		{
    
    
			vec.erase(vec.begin(),vec.begin()+1);
		}
		
		if(vec.size()==0) //如果数位全部被删掉了,则输出 0 
		{
    
    
			cout << 0;
		}
		else
		{
    
    
			for(int i=0; i<vec.size(); ++i)
		    {
    
    
		    	cout << vec[i];
	     	}
		}
		cout << endl;
	}
}

Supongo que te gusta

Origin blog.csdn.net/qq_46027243/article/details/109812845
Recomendado
Clasificación