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
【问题描述】输入一个高精度的大正整数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
这一道题目是一个贪心的算法,贪心的策略是将单调递减区间的第一个数字删掉,如果整个字符串已经单调递增排列的话,将最后一个删除.
代码:
# 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
c语言删数问题【问题描述】通过键盘输入一个正整数n,去掉其中任意s个数字后,剩下的数字按原左右次序,将组成一个新的正整数
输入一个N位高精度的正整数,去掉其中任意K个数字后剩下的数字按原左右次序组成一个新的正整数.
pascal高精度拆分整数 【问题描述】 输入一个正整数N(不超过一百位),如果N是偶数,则拆分N的各个数字相
给出一个多位数N,从中删除S个数字,要求删除S个数字后,将剩下的数字按原左右次序组成一个新的正整数,使
输入一个6位正整数,求出由该数各位数字组成的最大数.c语言
任意输入一个4位自然数,调用C 语言函数输出该自然数的各位数字组成的最大数
输入一个任意6位正整数,求出由该数各位数字组成的最大值和最小值.
输入一个数n,然后删去其中s个数字,使其删除后的数 按原来的顺序组成最小的数
pascal输入一个n位的正整数,输出由这n个数字组成的最大正整数.
真心请教高手:C语言 输入一个任意实数,输出它的最高位数字.谢谢!
C语言问题:输入一个正整数n和一个实数x 按给定公式求cos(x)的近似值(保留4位小数).
请输入任意一个正整数n,求出该数字为几位数字.