键盘输入一个高精度的正整数NN(不超过250250位) ,去掉其中任意kk个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的NN和kk,寻找一种方案使得剩下的数字组成的新数最小。
nn (高精度的正整数)
kk(需要删除的数字个数)
最后剩下的最小数。
175438 4
13
#include<bits/stdc++.h>
using namespace std;
int a[251],b[251],i,j,q,t=1,k,n,l,m=0,x=0,y=1,u=0;
string num;
int main(){
cin>>num>>l;
n=num.length();
int o=l;
k=n-l;
for(i=1;i<=n;++i)
{
a[i]=num[i-1]-‘0‘;
b[i]=9;
}
while(a[y]==0)
{
y++;
}
for(i=y;i<=n;i++)
{
if(a[i]!=0)
m++;
if(a[i]==0)
{
if(m<=l)
{
l-=m;
u+=m;
m=0;
t=i;
}
else break;
}
}
while(a[t]==0)
{
t++;
}
int kk=n-t+1-o+u;
if(kk<=0)
cout<<0;
else{
for(int j=1;j<=kk;j++)
{
for(i=t;i<=n;i++)
{
if(a[i]==0&&n-i+1>=kk-j+1)
{
b[j]=0;
t=i+1;
break;
}
if(a[i]<b[j]&&n-i+1>=kk-j+1)
{
b[j]=a[i];
t=i+1;
}
}}
for(i=1;i<=kk;i++)
{
cout<<b[i];
}
}
}
原文:https://www.cnblogs.com/lau1997/p/12589710.html