【问题描述】
键盘输入一个高精度的正整数n(≤240位),去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。
输入
两行
第一行:n
第二行:s
输出
最后剩下的最小数。
样例输入
175438 4
样例输出
13
分析:高精度输入时用字符串,然后再转入int数组中套两层循环在排序同时也删除较大数字。
最后走一遍排序完的数组,一直找到没有被删除的数字然后输出要求个数
#include<bits/stdc++.h>
using namespace std;
string st;
int n,a[251],l,k;
int main()
{
cin>>st;
cin>>n;
l=st.size();//输入字符串和要删除的数字个数,并获得字符串的位数
for(int i=0;i<l;i++) a[i]=st[i]-'0';//字符串转int
for(int i=1;i<=n;i++)//循环要删除的数字个数次
for(int j=0;j<l;j++)//遍历整个字符串的长度
if(a[j]>a[j+1]) //给数组排序
{
for(int k=j;k<l;k++)
a[k]=a[k+1];
l--;
break;
}//排序,并且在过程中记录下删掉要求数字个输后剩余的数字个数
int i=0;
while(a[i]==0&&k<l-1) //如果被删除接着往后遍历
{k++;
i++;}
for(int i=k;i<l;i++)
cout<<a[i];
return 0;
}