题解:P1106 删数问题

题目传送门

sol

很显然贪心,考虑每次删字符串中最大的那个数,删够 \(k\) 次后结束循环,然后去除前导零就可以了,根据小学数学可以证明,这里就不再阐述了,由读者自行证明。

:::info[code]{open}

#include<bits/stdc++.h>
using namespace std;
int main(){
 	int k;
 	string s;
 	cin>>s>>k;
 	for(int i=1;i<=k;i++){
 		int t=-1;
 		for(int j=0;j<=s.size()-1;j++){//找最大值所在的位置
 			if(s[j]>s[j+1]){
 				t=j;
 				break;
			 }
		 }
		 if(t== -1){//删除
		 	s.erase(s.size()-1);  
		 }else{
		 	s.erase(t,1);
		 }
	 }
    int f=0;
    if(s=="0"){//特判,如果是0那就直接输出0,如果不判断那么将不会输出
        cout<<0;
        return 0;
    }
	  for(int i=0;i<=s.size()-1;i++){//去除前导零
	 	if(s[i]!='0'){
	 		f++;
		 }
		 if(f){
		 	cout<<s[i];
		 }
	 }
 }
posted @ 2026-05-24 13:40  Synthx  阅读(10)  评论(0)    收藏  举报