作业帮 > 综合 > 作业

c语言删数问题【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 10:22:51
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
 题意绕来绕去,其实就是给你一个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;
}
再问: 这是c还是c++
再答: 不好意思哈,现在这个是C的代码:#include<stdio.h>
#include<string.h>
int main()
{
    char A[600];
    int i=0,s,k;
    scanf("%s",A);
    scanf("%d",&s);
    while(s>0)
    {
i=0;
while(i<strlen(A)&&A[i]<A[i+1])i++;
for(k=i;k<strlen(A);k++)
{
A[k]=A[k+1];
}
s--;
}
printf("%s\n",A);
    return 0;
}
再问: 错误输出: 只有这一个错误 070249798234634504732181240092465012404698049293470123489723490124709832427047823049238472934889204782018349027342934823429047823904821746529810467092140000234
再答: 这个是删除多少个数呢?给我个题目链接吧。
再问: 你进不去的 期望输出: 000000247234634504732181240092465012404698049293470123489723490124709832427047823049238472934889204782018349027342934823429047823904821746529810467092140000234