赞
踩
给定一个十进制正整数 n (0<n<10000000000),每个数位上数字均不为 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
这道题一定不要有一种错误的认知就是,只要每次都删掉最大的那个数,这就是最优解,
其实不然,比如数字1243865,如果删掉8得到的数字是124365,如果删掉 4,得到的是123865,
显然删掉4比删掉8得到的数字还要小。
通过分析可知删数的规律
1.删掉自左至右,第一个大于它右面数的数字
2.如果是自然序的话,删掉最右面的数字
- #include<iostream>
- #include<cstring>
- #include<string>
- #include<algorithm>
-
- using namespace std;
-
- string n;
- int k;
-
- void solve()
- {
- cin>>n>>k;
- while(k--)
- {
- for(int i=0; i<n.size(); i++)
- {
- if(n[i]>n[i+1] || i==n.size()-1)
- {
- n.erase(i,1);
- break;
- }
- }
- }
- cout<<n<<endl;
- }
-
- int main()
- {
- int t;
- cin>>t;
- while(t--)
- {
- solve();
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。