问题标题: 酷町堂:5045

0
0
已解决
高子健
高子健
新手天翼
新手天翼

题目描述 Description

给出一个高精度整数n(位数不超过1000位),请你对n进行m次删除操作(m远小于原来整数的位数):每次删除n中的一位,使得剩下来的数字最小(剩下来的数字前后次序不变,如果出现高位0直接舍弃)。
输出每次删除操作得到的数字。

输入描述 Input Description

输入一个正整数n(长度不超过1000位)和一个整数m(m远小于n的长度)。

输出描述 Output Description

输出m行:每一次删除操作得到的数字(高位0直接舍弃)。

样例输入 Sample Input

10213 3

样例输出 Sample Output

213 13 1

数据范围及提示 Data Size & Hint

样例解释:
第1次删除首位的1,得到0213,高位0直接舍弃,输出213;
第2次删除213中的2,得到13;
第3次删除3,得到1。

#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int main(){
    string s;
    int n;
    cin>>s;
    cin>>n;
    while(n--){
    for(int i=0;i<=s.size()-1;i++){
            if(s[i]<s[i-1]||i==s.size()-1)
            s.erase(i,1);
            n--;
            break;
        }
    }
    for(int i=0;i<=s.size()-1;i++){
        cout<<s[i];
    }
}

考试题(补考)

高子健在2020-11-12 19:48:50追加了内容

m


0
已采纳
陈振轩
陈振轩
高级光能
高级光能

Emmm

题目要求

要有过程

你这没过程啊

肯定错(

不如直接在while循环内输出s字符串

首先,你没有判断首位是否为0,在for循环后加上"while(s[0] != '0') s.erase(0, 1);"

还有

在for循环内

似乎需要两个判断

第一个是判断第一个字符是否小于第二个的字符

(你跟我的写法似乎 不一样 我的是从0到s.size()-2)

判断s[i]是否大于s[i+1]{
删除s[i]
break;
}
判断i是否为s.size()-2{
删除s[i+1]
}

还有你的n--似乎出了点问题

把while(n--)中的条件表达式改成"n"

然后在while循环末加上n--

我要回答