【OpenJ_Bailian - 4137】最小新整数 (贪心)

最小新整数

Descriptions:

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

Input

第一行t, 表示有t组数据; 
接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k。

Output

t行,每行一个数字,表示从n中删除k位后得到的最小整数。

Sample Input

2
9128456 2
1444 3

Sample Output

12456
1

题目链接:

https://vjudge.net/problem/OpenJ_Bailian-4137

 

一开始简单的认为是删除最大数,结果WA了一次,然后发现这组数据

                       1528     1

                如果直接删最大的8,结果为152,如果删掉5,结果为128,显然删掉5才是最佳答案。

      后来发现

      1.每次都删去大于右边的数

      2.如果k>0, 删去最大的数

      3.如果还k>0, 此时所有数都相等,那就依次删吧

 

AC代码

复制代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define ME0(x) memset(x,0,sizeof(x))
using namespace std;
int n,k;
string s;
int findMax()
{
    int pos=-1;//最大数值的位置
    int maxn=-1;//最大的数值
    for(int i=0; i<s.length(); i++)
    {
        if(s[i]-'0'>maxn)
        {
            maxn=s[i]-'0';
            pos=i;
        }
    }
    return pos;
}
int main()
{
    cin>>n;
    while(n--)
    {
        cin >> s>>k;
        //先删去大于右边的数
        for(int i=0; i<s.length()-1&&k>0; ++i)
        {
            if(s[i]>s[i+1])
            {
                s.erase(i,1);
                --i;
                --k;
            }
        }
        //如果k>0,删去最大的数
        while(k>0)
        {
            s.erase(findMax(),1);
            --k;
        }
        //k仍大于0,此时所有数都相等,依次删除即可
        if(k>0)
        {
            for(int i=0; i<s.length(); ++i)
            {
                s.erase(i,1);
                --i;
                --k;
            }
        }
        cout<<s<<endl;
    }
}
复制代码

 



posted on   Sky丨Star  阅读(638)  评论(1编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示