给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。
现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?
例如: n = 9128456, k = 2, 则生成的新整数最小为12456
2 9128456 2 1444 3
12456 1
//对原来数字减去其中的一位,并且保证减去后的数字是最小的整数
//记录是否有删除数字的操作,false为无删除操作,true有删除操作
//对于9128456,第一次删除9,第二次删除8,9>1,8>4,从数的最高位往最低位数,
//如果碰到某一位数字大于它后面一位的数字,就删除这位数字
//数字类似于123456789这样的,一直升序的话,删除最后一位
1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[100]; 4 void fun(int n){//对原来数字减去其中的一位,并且保证减去后的数字是最小的整数 5 //记录是否有删除数字的操作,false为无删除操作,true有删除操作 6 //对于9128456,第一次删除9,第二次删除8,9>1,8>4,从数的最高位往最低位数, 7 //如果碰到某一位数字大于它后面一位的数字,就删除这位数字 8 //数字类似于123456789这样的,一直升序的话,删除最后一位 9 int flag=0; 10 for(int i=0;i<n-1;i++){ 11 if(flag==1||a[i]>a[i+1]){ 12 a[i]=a[i+1]; 13 flag=1; 14 } 15 } 16 } 17 18 int main() { 19 int n,k,len; 20 cin>>n; 21 while(n--) { 22 string s; 23 cin>>s>>k; 24 len=s.length(); 25 for(int i=0; i<len; i++) { 26 a[i]=s[i]-‘0‘; 27 } 28 while(k--){ 29 fun(len); 30 len--; 31 } 32 for(int i=0;i<len;i++){ 33 cout<<a[i]; 34 } 35 cout<<endl; 36 } 37 return 0; 38 }
原文:https://www.cnblogs.com/aiqinger/p/12588827.html