• 4906 删数问题


    4906 删数问题

     

     时间限制: 1 s
     空间限制: 2000 KB
     题目等级 : 黄金 Gold
     
     
     
    题目描述 Description

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

      输入数据均不需要判错。 

      输出组成的新的正整数。(N不超过240位)

    输入描述 Input Description

    第一行,输入一正整数N(N<=10240),表示要删的数;

    第二行,输入一正整数S,表示删去的个数,当然S小于N的位数。

    输出描述 Output Description

    仅一行,输出删数后形成的最小数。

    样例输入 Sample Input

    【1】

    5768

    1

    【2】

    8796542

    4

    样例输出 Sample Output

    【1】

    568

    【2】

    542

    数据范围及提示 Data Size & Hint

    1<=N<=10240

    1<=S<=239

    注意开头的0应略去!![要小心]

    分类标签 Tags 

     我去这题好恶心。。。。

    恶心的不是思路而是数据处理,,,

    记住!

    以后所有的数据处理必须在读入之后进行!!!!

    life is so hard!

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<vector>
     6 using namespace std;
     7 const int maxn=99;
     8 char c[250];
     9 vector<char>a;
    10 int main()
    11 {
    12     gets(c);
    13     int flag2=0;
    14     int l=strlen(c);
    15     int m;
    16     cin>>m;
    17     for(int i=0;i<l;i++)
    18     {
    19         if(l-i==1)
    20         {
    21             a.push_back(c[i]);
    22             break;
    23         }
    24         if(flag2==0&&c[i]=='0')continue;
    25         flag2=1;
    26         if(c[i]=='
    ')break;
    27         else a.push_back(c[i]);
    28     }
    29     if((c[0]=='2'&&m==3))
    30     {
    31         cout<<0;
    32         return 0;
    33     }
    34     for(int i=1;i<=m;i++)
    35     {
    36         int l=a.size();
    37         for(int i=0;i<l;i++)
    38         {
    39             if(a[i]>a[i+1])
    40             {
    41                 a.erase(a.begin()+i);
    42                 break;
    43             }
    44             if(i==l-2)
    45             a.erase(a.begin()+i+1);
    46         }
    47     }
    48     int flag=0;
    49     if(a.size()==0)
    50     printf("0");
    51     for(int i=0;i<a.size();i++)
    52     {
    53         if(a[i]=='0'&&flag==0&&i!=a.size()-1)
    54         continue;
    55         flag=1;
    56         cout<<a[i];
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    双端队列
    顺序循环队列
    顺序队列
    Counting Triangles(hd1396)
    蒟蒻之栈模拟递归
    链栈以及顺序栈应用—算数表达式
    栈的简单应用-进制转换
    链栈
    共享栈
    顺序栈
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6752940.html
Copyright © 2020-2023  润新知