删数
输入一个高精度的正整数 n(长度不大于 240 位),
去掉其中任意 s 个数字后,剩下的数字按原左右次序将组成一个新的正整数,现求一种方案,使得新的正整数数值最小。
输入
第一行一个整数 n
第二行一个正整数 s
输出
输出一个数表示最小值,输出时忽略数字的前导零
样例:
参考代码
- 让小的数字在前面、大的数字在后面,使得整体的数字变小。
- 删除违反该规则的数字,
- 如果没有违反规则的数字,则删除最后一个数字(最大的数字)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include<iostream> #include<string> using namespace std;
int main() { string str; cin >> str; int n; cin >> n; for (int i = 0; i < n; ++i) { int ind = str.size() - 1; for (int j = 1; j < str.size(); ++j) { if (str[j - 1] > str[j]) { ind = j - 1; break; } } str.replace(ind, 1, ""); } int flag = 0; for (int i = 0; i < str.size(); ++i) { if (flag == 1) { cout << str[i]; } else if (str[i] != '0') { cout << str[i]; flag = 1; } } if (flag == 0) cout << "0"; cout << endl; return 0; }
|