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

    题目描述

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

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

    输入输出格式

    输入格式:

     

    n (高精度的正整数)

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

     

    输出格式:

     

    最后剩下的最小数。

     

    输入输出样例

    输入样例#1: 复制
    175438 
    4
    
    输出样例#1: 复制
    13

    *******每次遇到一个比他后一位大的数就把他删除,然后,后面的数向前移,注意前面是零的要把他删除,遇到结果就是0的要特判一下

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 using namespace std;
     6 int i,j,l,u = 1,w,op = 0,a[255],k;
     7 char s[255];
     8 int main()
     9 {
    10     scanf("%s",s);
    11     l = strlen(s);
    12     scanf("%d",&k);
    13     w = k;
    14     for(i = 1;i <= l;i++)
    15     {
    16         a[i] = s[i - 1] - '0';
    17     }
    18     a[l + 1] = 0;
    19     while(k > 0)
    20     {
    21         k--;
    22         for(i = 1;i <= l;i++)
    23         {
    24             
    25             if(a[i] > a[i + 1])
    26             {
    27                 for(j = i;j <= l;j++)
    28                 {
    29                     a[j] = a[j + 1];
    30                 }
    31                 break;
    32             }
    33         }
    34     }
    35     op = 1;
    36     while(a[op] == 0 && op != l - w)
    37     {
    38         op++;
    39     }
    40     if(op == l - w)
    41     {
    42         printf("0");
    43     }
    44     else
    45     {
    46         for(i = op;i <= l - w;i++)
    47         {
    48             printf("%d",a[i]);
    49         }
    50     }
    51     return 0;
    52 }


  • 相关阅读:
    setTimeout详解
    【康娜的线段树】
    【[CQOI2016]手机号码】
    【[IOI2014]Wall 砖墙】
    【[1007]梦美与线段树】
    【[POI2010]ANT-Antisymmetry】
    【[HEOI2016/TJOI2016]排序】
    【[SCOI2016]背单词】
    【[HNOI2008]GT考试】
    【[JSOI2007]建筑抢修】
  • 原文地址:https://www.cnblogs.com/rax-/p/9851707.html
Copyright © 2011-2022 走看看