初级光能
1412 数字删除游戏
题目描述 Description
小C最近在玩一个数字游戏,电脑上随机生成一个整数n(n可能很大,可能达到几十位,但最大不超过100位),然后电脑指定删除的位数m(m小于n的位数),要求使删除之后剩下的数字按照原来的次序组成一个新数最大。如一个整数90284316718358,电脑指定删除10位,删除之后按照原来次序组成的新数为9888。
输入描述 Input Description
输入为一行,分别为整数n,(n可能很大,可能达到几十位,但最大不超过100位),和指定的删除位数m(m小于n的位数),中间用单个空格隔开。
输出描述 Output Description
输出为一行,表示删除之后剩下的数字按照原来的次序组成一个最大的新数。
样例输入 Sample Input
90284316718358 10
样例输出 Sample Output
9888
本人错误代码:
#include<bits/stdc++.h>
using namespace std;
struct hh
{
int a;
char s;
}a[10000];
bool cmp(hh a,hh b)
{
return a.s>b.s;
}
bool cmd(hh a,hh b)
{
return a.a<b.a;
}
int main()
{
int n,len;
string m;
cin>>m>>n;
len=m.size();
for(int i=0;i<=len;i++)
{
a[i].a=i;
a[i].s=m[i];
}
sort(a,a+len,cmp);//for(int i=0;i<=len-n-1;i++)cout<<a[i].a;
sort(a,a+len-n,cmd);//for(int i=0;i<=len-n-1;i++)cout<<a[i].a;
for(int i=0;i<=len-n-1;i++)
{
cout<<a[i].s;
}
return 0;
}
@贾敬波 @葛新 @翟谦瑞 @舒航 @刘陶哲
初级天翼
就是循环这个字符串的每一位,如果前一位大于后一位或者是字符串的最后一位,则删除这一位。
可以这么删除:
n=n.erase(i,1);
m--;
break;
循环字符串的每一位前要循环m的个数,如果m为0,则运行完毕,就退出循环,输出这个字符串。
你的思路不对,没有删除。
栾峻岩在2018-08-13 20:54:52追加了内容
初级启示者
cin>>s;
int m;
cin>>m;
b=s.size();
while(m--)
{
for(int i=0;i<b;i++)
{
if(s[i]<s[i+1]||i==b-1)
{
s.erase(i,1);
b--;
break;
}
}
}
思想:输入字符串,m,一直循环,到0自动跳出,循环判断如果s[i]<s[i+1]就删除前一个,留下大的,跳出循环.
类似1200 2786
@梁彦博 望采纳
赵逸凡在2018-08-12 15:20:25追加了内容
@梁彦博 你要的思路:
样例输入 Sample Input
90284316718358 10
第一轮,9>0,0<2:因为题目求最大的数所以就把小的数给切了,然后长度自减。第一轮结束,m在while自动减1
第二轮,9284316718358 9>2 2<8,切2
.......
最后一轮:9888
赵逸凡在2018-08-13 11:29:25追加了内容
@梁彦博
新手守护
这题好简单啊!!!
首先输入字符串和删除的个数
一个while循环里面嵌套for
判断一下后面一个大于前面一个
成立个数--
再用函数擦出当前这个字符
然后结束循环
最后输出
采纳