老师平时布置的希冀系统上的作业答案,仅供参考!
【问题描述】
输入一个高精度的大正整数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
暂无评论内容