【C++】之''删数问题''

老师平时布置的希冀系统上的作业答案,仅供参考!

【问题描述】

输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S’。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数S’最小。

【输入形式】

输入有两行:
1.第一行是大整数S。其中S最长可达240位。
2.第二行是整数N。S、N均以非0数字开头。

【输出形式】

输出有一行,是在S中删除N位后所得的最小数字S’。

【样例输入1】

178543
4

【样例输出1】

13

【样例输入2】

1002
1

【样例输出2】

002

【样例说明】

样例1中输入整数S=178543,N=4,要求在178543中删除4位,使剩下的数字最小。正确答案为S’ = 13。样例2中输入整数S=1002,N=1,删完一位后S’ = 002,而不是2,即2之前的0也必须输出。

【运行时限】

程序一次运行的最长时间限制在15秒内,超出则认为程序错误。

【算法提示】

将整数看作字符串形式读入;删数时,从前往后寻找第一个比后一个数字大的数字,然后删除之,按照这种方法删除N个数字即得最小数字。

【参考答案】

# include<iostream>
# include<string>
using namespace std;

int main()
{
int k;
string s;
string::size_type i;
while(cin>>s>>k)
{
while(k)
{
for(i=0;i!=s.size()-1 && s[i]<=s[i+1];++i);
s.erase(i,1); k--;
}
cout<<s<<endl;
}
return 0;
}
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容