题目描述
输入一个高精度的正整数n(≤240位),去掉其中任意s个数字后,剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。
输入格式
第一行,一个正整数n;
第二行,s(s<n的位数)。
输出格式
最后剩下的最小数。
输入样例
175438
4
输出样例
13
题解
容易想到,把当前的数转换成一个数字串,那么这个数字串里如果出现了逆序对,就删除这个逆序对的第一个元素即可。如果不存在逆序对,就删除最后一位即可。
#include <iostream> #include <cstring> #define MAXN 260 using namespace std; char a[MAXN]; int sa; int s; int main() { cin >> a; sa = strlen(a); a[sa] = 0; cin >> s; while(s--) for(register int i = 0; i < sa; i++) { if(a[i] > a[i + 1])//逆序则删除当前的数字 { for(register int j = i; j < sa; j++) a[j] = a[j + 1]; sa--; break; } } for(register int i = 0, op = 0; i + 1 < sa; i++) if(op || a[i] != ‘0‘) op = 1, cout << a[i];//去除前导0 cout << a[sa - 1]; return 0; }
参考程序
原文地址:https://www.cnblogs.com/kcn999/p/10799438.html
时间: 2024-10-08 16:41:12