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

    1106 删数问题

    难度:普及/提高-

    题目类型:贪心

    提交次数:3

    涉及知识:字符串、贪心

    题目描述

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

    输出应包括所去掉的数字的位置和组成的新的正整数。(N不超过250位) 输入数据均不需判错。

    代码:

    #include<iostream>
    #include<cstring>
    using namespace std;
    int main(){
        string s;
        cin>>s;
        int k;
        cin>>k;
        int n = 0;
        int i = 0;
        //cout<<bool(i<=s.length()-2)<<endl;
        while(n<k&&i<s.length()-1){
            i++;
            if(s[i-1]>s[i]){
                s.erase(i-1,1);
                n++;
                i=0;
            }
        }
        //cout<<k-n<<endl;
        for(i = 0; i < k-n; i++) 
            s.erase(s.length()-1, 1);
        for(i = 0; i < s.length(); i++){
            if(s[i]!='0') {
                cout<<s.substr(i, s.length()-i);
                return 0;
            }
        }
        if(i==s.length())cout<<'0';
        return 0;
    }

    备注:

    感觉被诅咒一样,这道题写的特别费劲。基本思路就是贪心,找到降序就删掉第一个,然后再从头找。最开始是i、n应该是1还是0,在什么位置加1,加1还是减1还是不加不减这种小细节搞了半天,感觉智商被掏空。字符串函数用的还是不熟练,多写写就好了。另外要注意的关键就是先导0问题。ps:字符0和数字0不一样,所以不能用if(s[i])判断。另外有一个诡异的问题,就是注释的第一行,由于老师出去约饭去了,正在等待老师解答中。


    得到老师解答,很神奇,s.length()的返回值的是无符号数,负数和无符号数比就出问题啦。

  • 相关阅读:
    P7771 【模板】欧拉路径
    远程服务器运行代码命令(后台执行 及时输出)
    服务器显存溢出
    指定python环境下pip安装包
    语音信号处理
    Es 常用命令
    MySQL常用命令
    Mysql数据按天分区,定期删除,及分区索引
    查看Mysql正在执行的事务、锁、等待
    git忽略提交文件 IT
  • 原文地址:https://www.cnblogs.com/fangziyuan/p/5781903.html
Copyright © 2011-2022 走看看