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

洛谷P1106 删数问题

时间:2017-09-13 22:14:50      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:style   bool   方案   names   数字   span   分析   mil   输入输出   

题目描述

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

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

输入输出格式

输入格式:

 

n (高精度的正整数)

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

 

输出格式:

 

最后剩下的最小数。

 

输入输出样例

输入样例#1:
175438 
4
输出样例#1:
13
分析:贪心思想,我们每次删数肯定是要找前面的大数给删掉,并且这一位还要比下一位大,这样删掉以后一定会变小,模拟k次过程就好了,不过有几点要注意:1.可能会出现前导0. 2.如果删掉只剩下一个数,并且这个数是0,就不能把它当做前导0.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>

using namespace std;

string s;
int k,cnt;
bool flag = false;

int main()
{
    cin >> s; 
    int sizee = s.size();
    scanf("%d",&k);
    for (int i = 1; i <= k; i++)
    {
        for (int j = 0; j < sizee - 1; j++)
        {
            if (s[j] > s[j + 1])
            {
                for (int k = j + 1; k < sizee; k++)
                s[k - 1] = s[k];
                break;
            }
        }
        sizee--;
    }
    for (int i = 0; i < sizee; i++)
    if (s[i] != 0 || (s[i] == 0 && flag) || sizee == 1)
    {
    cout << s[i];
    if (s[i] != 0)
    flag = 1;
    }

    return 0;
}

 

 

洛谷P1106 删数问题

标签:style   bool   方案   names   数字   span   分析   mil   输入输出   

原文地址:http://www.cnblogs.com/zbtrs/p/7517752.html

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