zoukankan      html  css  js  c++  java
  • P1106 删数问题

     展开

    题目描述

    键盘输入一个高精度的正整数NN(不超过250250位) ,去掉其中任意kk个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的NN和kk,寻找一种方案使得剩下的数字组成的新数最小。

    输入格式

    nn (高精度的正整数)

    kk(需要删除的数字个数)

    输出格式

    最后剩下的最小数。

    输入输出样例

    输入 #1
    175438 
    4
    
    输出 #1
    13


    思路:从前往后枚举,删除上升子串的最后一位。也就是如果s[i]>s[i+1],那么就删除s[i];
    由于删除操作比较麻烦,可以采用第i+1到n位向前移一位的方式。
    还要考虑前导0的问题。
    #include<iostream>
    #include<string>
    using namespace std;
    
    int main()
    {
        string s;
        int k;
        cin >> s;
        cin >> k;
        int k1=k;
        int q;
        while(k--)
        {
            int flag=0;
            for(int i=0; i<s.size(); i++)
            {
                if(s[i]>s[i+1])
                {
                    q=i;
                    flag=1;
                    break;
                }
            }
            if(flag)
            {
                for(int i=q; i<s.size(); i++)
                {
                    s[i]=s[i+1];
                }
            }
        }
        int num=0;
        while(num<s.size()-k1&&s[num]=='0')
            num++;
        if(num==s.size()-k1)
            cout << 0 << endl;
        else
        {
            for(int i=num;i<s.size()-k1;i++)
                cout << s[i];
            cout << endl;
        }
        return 0;
    }
  • 相关阅读:
    21班考试总结
    性别
    2019.08.20上课笔记2
    2019.08.20上课笔记3
    2019.08.20上课笔记1
    单词2
    数据类和运算符
    2019.08.14单词1
    2019.08.14上课笔记1
    request.get... getHeader 能取得的信息 参数
  • 原文地址:https://www.cnblogs.com/wjc2021/p/11940886.html
Copyright © 2011-2022 走看看