洛谷P1106 删数问题
这个题我的思路就是遍历这个数的每一位,跟前面的数比较,如果大了,就删掉,注意这里是的第二层遍历的时候是从右边往左边遍历比较,因为前面的已经比较过了,后面的数比前面的大。
#include<iostream>
using namespace std;
int main()
{
string s;
int k;
cin>>s>>k;
int len = s.length();
for(int i=1;i<len;i++)
{
for(int j=i;j>=0;j--) //应该是从右往左删 因为前面的都符合顺序 右边的才是大的
{
if(s[i]<s[j])
{
s[j] = ' ';
k --;
}
if(k==0) break;
}
if(k==0) break;
}
//cout<<"s "<<s<<endl;
while(k--) len --; //没删够 从后面删 因为后面大
while(s[len]==' '&&len>1) len --; //除去后置‘ ’
int b=0;
while((s[b]==' '||s[b]=='0')&&b<len-1) b ++; //除去前置0和‘ ’
for(int i=b;i<len;i++)
{
if(s[i]!=' ')
cout<<s[i];
if(s[i]==' '&&len==1) cout<<0<<endl; //输出0
}
//感觉这题有点坑 题中没说删后的位数,所以最前面可以为0
return 0;
}
写的很烂,哈哈哈哈,但是写了好久,就记录一下