Directorio de artículos
1. Descripción del título
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;
}
}