zoukankan      html  css  js  c++  java
  • 【贪心】删数问题

    题目描述

    输入一个高精度的正整数n(≤240位),去掉其中任意s个数字后,剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。

    输入

    第1行:一个正整数n;
    第2行:s(s<n的位数).

    输出

    最后剩下的最小数。

    样例输入

    175438
    4
    

    样例输出

    13

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
        char str[245];
        scanf("%s",str);
        int len = strlen(str);
    
        int k;
        cin>>k;
        str[len] = '0'-1;
        while(k--)
        {
            for(int i=0;i<len;i++)
            {
                if(str[i]>str[i+1])
                {
                    for(int j=i;j<len;j++)
                    {
                        str[j] = str[j+1];
                    }
                    len--;
                    break;
                }
            }
        }
        str[len] = '';
        int flag = 0;
        for(int i=0;i<len;i++)
        {
            if(str[i]!='0')
                flag = 1;
        }
        if(flag)
        {
            int i;
            for(i=0;i<len;i++)
            {
                if(str[i]!='0')
                    break;
            }
            for(int j= i;j<len;j++)
            {
                printf("%c",str[j]);
            }
        }
        else
            cout<<'0';
        return 0;
    }

    注意:特殊情况需要处理前导零,例如:

    str[] = “1054”  k = 2   ans = 4  (我用这个例子滴出了bug)

    要去除前导0

  • 相关阅读:
    DOM总结
    BOM总结
    备忘录设计模式
    策略模式
    迭代器模式
    观察者模式
    装饰模式
    脚本工具(获取某个文件夹下的所有图片属性批量生成css样式)
    ajax传输中文乱码解决方法
    java Serialization and Deserializaton
  • 原文地址:https://www.cnblogs.com/hao-tian/p/9415765.html
Copyright © 2011-2022 走看看