码迷,mamicode.com
首页 > 其他好文 > 详细

1106 删数问题

时间:2016-08-17 22:59:58      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

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])判断。另外有一个诡异的问题,就是注释的第一行,由于老师出去约饭去了,正在等待老师解答中。

1106 删数问题

标签:

原文地址:http://www.cnblogs.com/fangziyuan/p/5781903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!