首页 > 其他 > 详细

4137:最小新整数

时间:2020-03-28 19:36:09      阅读:80      评论:0      收藏:0      [点我收藏+]

 

总时间限制: 
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 }

 

 

 

4137:最小新整数

原文:https://www.cnblogs.com/aiqinger/p/12588827.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!