zoukankan      html  css  js  c++  java
  • 3528:最小新整数

    描述

    给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。
    现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?
    例如: n = 9128456, k = 2, 则生成的新整数最小为12456

    输入第一行t, 表示有t组数据;
    接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k。输出t行,每行一个数字,表示从n中删除k位后得到的最小整数。样例输入

    2
    9128456 2
    1444 3
    

    样例输出

    12456
    1
     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     char a[10];
     6     int b[11],len,i,t,k,p,q;
     7     scanf("%d",&t);
     8     while(t--)
     9     {
    10         memset(b,-1,sizeof(b));
    11         scanf("%s %d",a,&k);
    12         len=strlen(a);
    13         for(i=1;i<=len;i++)
    14             b[i]=a[i-1]-'0';
    15         for(p=1;p<=k;p++)
    16             for(i=1;i<=len;i++)
    17             {
    18                 if(i==len)
    19                 {
    20                     len--;
    21                     break;
    22                 }
    23                 if(b[i]>b[i+1])
    24                 {
    25                     for(q=i;q<len;q++)
    26                         b[q]=b[q+1];
    27                     len--;
    28                     break;
    29                 }
    30             }
    31         for(i=1;i<=len;i++)
    32             if(b[i]>0)
    33                 printf("%d",b[i]);
    34         printf("
    ");
    35     }
    36     return 0;
    37 }
     1 //这个程序栈溢出,仅供参考
     2 #include<stdio.h>
     3 #include<string.h>
     4 int b[11];
     5 int i,j,mi,min;
     6 void m(int s,int z,int k)
     7 {
     8     if(k==0)    return ;
     9     else
    10     {
    11         min=10;
    12         for(i=s;i<=z;i++)
    13             if(b[i]<min&&b[i]!=-1)
    14             {
    15                 mi=i;min=b[i];
    16             }
    17         if(mi-s<=k)
    18         {
    19             for(i=s;i<mi;i++)
    20                 b[i]=-1;
    21             m(mi+1,z,k-mi+s);
    22         }
    23         else
    24             m(s,mi-1,k);
    25     }
    26 }
    27 int main()
    28 {
    29     char a[10];
    30     int k,la,t;
    31     scanf("%d",&t);
    32     while(t)
    33     {
    34         memset(b,-1,sizeof(b));
    35         scanf("%s %d",a,&k);
    36         la=strlen(a);
    37         for(i=0;i<la;i++)
    38             b[i+1]=a[i]-'0';
    39         m(1,la,k);
    40         for(i=1;i<=la;i++)
    41             if(b[i]!=-1)    printf("%d",b[i]);
    42         printf("
    ");
    43         t--;
    44     }
    45 }
  • 相关阅读:
    CF1280G Kirchhoff's Current Loss【表达式解析,不等式】
    [AGC040C] Neither AB nor BA
    [AGC040B]Two Contests
    [ARC101E]Ribbons on Tree(容斥,dp)
    [GXOI/GZOI2019]旧词
    [SDOI2015]寻宝游戏
    半平面交初步
    [CF585E]Marbles
    [P5348]密码解锁
    NOIP2018 保卫王国
  • 原文地址:https://www.cnblogs.com/qianxuejin/p/6079463.html
Copyright © 2011-2022 走看看