c语言删数问题【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S’.编程对给定的N和S,寻找一种方案使得剩下的数
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/22 21:55:48
c语言删数问题【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S’.编程对给定的N和S,寻找一种方案使得剩下的数
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也必须输出.
我是这样做的,为什么不行
#include
int main()
{
char n[240],m[240];
int s,k=0,i=0,j;
\x09j=strlen(n);
scanf("%s %d",&n[i],&s);
\x09for(i=0;i
c语言删数问题【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S’.编程对给定的N和S,寻找一种方案使得剩下的数
题意绕来绕去,其实就是给你一个N位数,让你去掉K位,使得剩下的(N - K)位数最小.
这一道题目是一个贪心的算法,贪心的策略是将单调递减区间的第一个数字删掉,如果整个字符串已经单调递增排列的话,将最后一个删除.
代码:
# 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;
}