描述
输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小。
输出新的正整数。(n不超过240位)
输入数据均不需判错。
输入描述
两个整数n和s
输出描述
一个正整数,即最少需要的组数。
用例输入 1
175438 4
用例输出 1
13
代码如下:
#include<bits/stdc++.h>
using namespace std;
char a[241]={};
int n,s;
int shan(){
for(int j=1;j<s;j++){
if(a[j]<a[j-1]){//找到递增的最大的数
// cout<<j<<" ";
return j-1;
}
if(j==s-1){//所有数都是递增的
return j;
}
}
}
int main(){
cin>>a>>n;//以字符串类型输入
s=strlen(a);//求长度
if(n>=s){//判断特殊情况数被删完
cout<<0;
return 0;
}
for(int i=0;i<n;i++){
int j=shan();//记录删除数的下标
//cout<<j<<endl;
for(int k=j;k<s-1;k++){//移动数组删除需要删除的数字
swap(a[k],a[k+1]);
}
}
bool flag=0;//用标记法找到第一个不为零的数
for(int i=0;i<s-n;i++){
if(a[i]!='0'){
flag=1;
}
if(flag==1){
cout<<a[i];
}
}
return 0;
}
本题是上一个删数问题的优化!