制作个人免费网站展示设计,网站公众号信息化建设工作计划,凤城网站建设,企业微信小程序登录入口文章目录 题目描述方法一方法二 题目描述 
给定一个十进制正整数n(0  n  1000000000)#xff0c;每个数位上数字均不为0。n的位数为m。 现在从m位中删除k位(0k  m)#xff0c;求生成的新整数最小为多少#xff1f; 例如: n  9128456, k  2, 则生成的新整数最… 文章目录 题目描述方法一方法二  题目描述 
给定一个十进制正整数n(0  n  1000000000)每个数位上数字均不为0。n的位数为m。 现在从m位中删除k位(0k  m)求生成的新整数最小为多少 例如: n  9128456, k  2, 则生成的新整数最小为12456 
输入 第一行t, 表示有t组数据 接下来t行每一行表示一组测试数据每组测试数据包含两个数字n, k。 
输出 t行每行一个数字表示从n中删除k位后得到的最小整数。 
输入样例 2 9128456 2 1444 3 输出样例 12456 1 
方法一 
#includeiostream
using namespace std;
int k;
main()
{int t;cint;while(t--){string n; cinnk;int lenn.size();while(k--)for(int i0;ilen;i) if(n[i]n[i1]||ilen-1) //删除遇到的第一个递减序列的第一个数字(若整个字符串为非递减序列则删去末尾的数字){n.erase(i,1); //把当前字符从字符串中删除break; //不可省略否则字符串会多删字符}while(n[0]0n[1]) //去掉前缀0并至少保留1个数字n.erase(0,1); //删去当前字符串开头的0coutnendl; //输出字符串}
}方法二 
#includestdio.h
#includestring.hint main() {int t, k;char a[200];scanf(%d, t); while (t--) { int i, j, l;scanf(%s %d, a, k); int len  strlen(a); for (i  0; i  k; i) { // 执行 k 次删除操作for (j  0; j  len - 1; j) { // 找到第一个逆序对并删除if (a[j]  a[j  1]) {for (l  j; l  len - 1; l) { // 删除逆序对a[l]  a[l  1];}break;}}len - 1; // 每删除一个字符字符串长度减一}for (i  0; i  strlen(a) - k; i) { // 输出删除后的字符串if (i  0  a[i]  0) { // 如果删除后的字符串以0开头则跳过0continue;}printf(%d, a[i] - 0);}printf(\n);}return 0;
}