NYOJ 448

来源:互联网 发布:火狐兼容的js报表打印 编辑:程序博客网 时间:2024/06/01 08:27
    寻找最大数时间限制:1000 ms  |  内存限制:65535 KB难度:2描述    请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,    比如当n=92081346718538,m=10时,则新的最大数是9888     输入    第一行输入一个正整数T,表示有T组测试数据    每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)输出    每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数样例输入    2    92081346718538 10    1008908 5样例输出    9888    98#include<iostream>      #include<cstdio>      #include<cstring>      #include<algorithm>      #include<cmath>      using namespace std;      int main()      {          int ncase;          char s[110], ans[110];          int m, len, sign, max, num;          scanf("%d", &ncase);          while(ncase--)          {              num = sign = 0;              scanf("%s%d", s, &m);              len = strlen(s);              for(int i = 0; i < len - m; ++i) //找m次最大值              {                  max = -1;                  for(int j = sign; j <= m + i; ++j) //j的范围不能错~保证位数                  {                      if(max < s[j] - '0')                      {                          max = s[j] - '0';                          sign = j;                      }                  }                  ans[num++] = s[sign++];              }              for(int i = 0; i < len - m; ++i)                  cout<<ans[i] - '0';              cout<<endl;          }          return 0;      }   思路详解:如上       

0 0