问题标题: 酷町堂:1412我哪错了???

0
0
已解决
梁彦博
梁彦博
初级光能
初级光能

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;
}

@贾敬波 @葛新 @翟谦瑞 @舒航 @刘陶哲 

 

 

 


0
已采纳
栾峻岩
栾峻岩
初级天翼
初级天翼

就是循环这个字符串的每一位,如果前一位大于后一位或者是字符串的最后一位,则删除这一位。

可以这么删除:

 n=n.erase(i,1);
m--;
break;

循环字符串的每一位前要循环m的个数,如果m为0,则运行完毕,就退出循环,输出这个字符串。

 

你的思路不对,没有删除。

栾峻岩在2018-08-13 20:54:52追加了内容

1
赵逸凡
赵逸凡
初级启示者
初级启示者
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追加了内容

@梁彦博 

 

0
0
舒航
舒航
新手守护
新手守护

这题好简单啊!!!

首先输入字符串和删除的个数

一个while循环里面嵌套for

判断一下后面一个大于前面一个

成立个数--

再用函数擦出当前这个字符

然后结束循环

 

最后输出

采纳

0
我要回答