大佬帮忙看一下吧,自己捏的数据都对,考虑了前导零但是全Wa了。。谢谢!!!!
  • 板块P1106 删数问题
  • 楼主zyz21
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/2/20 00:55
  • 上次更新2023/10/28 08:06:35
查看原帖
大佬帮忙看一下吧,自己捏的数据都对,考虑了前导零但是全Wa了。。谢谢!!!!
627212
zyz21楼主2022/2/20 00:55
//要想使得剩下的最小,把较小的数尽可能的往高位留
#include <iostream>

using namespace std;

int main() {
    int number[255], result[255], result_length = 0;
    char bit;
    int i = 0, k, original_k;
    cin.get(bit);
    while (bit != ' ' && bit != '\n') {
        number[i] = bit - '0';
        ++i;
        cin.get(bit);
    }//此时有i位数
    cin >> k;//删去k位
    if (i == k) {
        cout << "0" << endl;
        return 0;
    }
    original_k = k;
    int the_min_index = 0, the_min_bit = number[0], last_min_index = -1;
    while (1) {
        for (int j = the_min_index, q = 0; q <= k; ++q, ++j) {
            if (number[j] < the_min_bit) {
                the_min_bit = number[j];
                the_min_index = j;
            }
        }//找到了最小的首位
        //下面就是把前面the_min_index之前的全删掉就好了
        k -= the_min_index - last_min_index - 1;//以后还能删这么多个
        result[result_length] = the_min_bit;
        result_length++;
        last_min_index = the_min_index;
        the_min_index++;//下一位数从这个开始找起
        the_min_bit = number[the_min_index];
        if (k == i - the_min_index || k == 0)break;
    }
    if (k == i - the_min_index) {
        int invalid = 0;
        while (result[invalid] == 0 && invalid < result_length)++invalid;
        if (invalid == result_length)cout << "0" << endl;
        else {
            for (int j = invalid; j < result_length; ++j)cout << result[j];
            cout << endl;
        }
    } else if (k == 0) {
        int invalid = 0;
        while (result[invalid] == 0 && invalid < result_length)++invalid;
        if (invalid != result_length) {
            for (int j = invalid; j < result_length; ++j)cout << result[j];
            for (int j = the_min_index; j < i; ++j)cout << number[j];
            cout << endl;
        } else {
            int invalid_ = the_min_index;
            while (number[invalid_] == 0 && invalid_ < i)invalid_++;
            if (invalid_ == i)cout << "0" << endl;
            else {
                for (int j = invalid_; j < i; ++j)cout << number[j];
                cout << endl;
            }
        }
    }

    return 0;
}
2022/2/20 00:55
加载中...