4137:最小新整数

 

总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。
现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?
例如: n = 9128456, k = 2, 则生成的新整数最小为12456

输入
第一行t, 表示有t组数据;
接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k。
输出
t行,每行一个数字,表示从n中删除k位后得到的最小整数。
样例输入
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 }

猜你喜欢

转载自www.cnblogs.com/aiqinger/p/12588827.html