NYOJ-448-寻找最大数

简介: NYOJ-448-寻找最大数





寻找最大数

时间限制: 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





题目分析: 这个贪心算法就有点小难理解了,首先要分析从什么位置开始查找,因为查找过程还不能改变原来数字的顺序。

9  2  0  8  1  3  4  6  7  1  8  , 5   3    8     10

0  1  2  3  4  5  6  7  8  9  10  ,11  12  13

来看这个数据,上边是原数据,下边是数据在数组中的脚码,总长度为 14 那么去掉 10 位后还有4 位那么次4位数的首位一定是在分号也即是10号之前0号后的数字中产生此数字的位置记为 k 而且这个数还是这之间最大的数,想一想是不是。那么第2位数一定是在11号之前在k+1号之后产生对吧此数子的位置记为k,第3位一定是在12号之前k+1之后产生此数字位置记为k,第4位一定是在13号前k+1之后产生吧。就是这个思路下面代码就好理解了。



<span style="font-size:24px;">#include<cstdio>
#include<cstring>
int main()
{
  int T;
  scanf("%d",&T);
  while(T--)
  {
    char a[101];
    int m;
    scanf("%s%d",a,&m);
    int len=strlen(a);
    int weishu=len-m;
    int j=0,i,k=0;
    char max='0';
    while(k<weishu)
    {
      int max=0;
      for(i=j;i<=m+k;i++)// 此处i<=m+k 一定带有=号
      {
        if(max<a[i])
        {
          max=a[i];
          j=i;
        }
      }
      j++;k++;
      printf("%c",max);
    }
    printf("\n");
  }
  return 0;
}</span>









目录
相关文章
|
JavaScript
NYOJ&#160;17
时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 题目很经典,学习一下吧。
649 0
|
人工智能 测试技术
NYOJ&#160;79
拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意 的高度,但是以后每一发炮弹都不能高于等于前一发的高度。
944 0
NYOJ 506
  洗澡 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 Mostrp是个爱干净的好少年。 有一次去澡堂洗澡时发现 澡堂的澡柜编号中没有出现过数字‘4’。
800 0
NYOJ 205
  求余数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数除10003之后的余数   输入 第一行有一个整数m(1T; 13 scanf("%*c")...
669 0
NYOJ 283
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 /* 9 bool cmp(char *a,char *b) 10...
473 0
|
人工智能
NYOJ 461
  Fibonacci数列(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:4   描述 数学神童小明终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来。
704 0
NYOJ 113
1 #include 2 #include 3 using namespace std; 4 5 int main() 6 { 7 int pos=-1; 8 string s; 9 while(getline(cin,s)) 10 { 11 while((pos=s.
664 0
|
人工智能
NYOJ 55
  懒省事的小明 时间限制:3000 ms | 内存限制:65535 KB 难度:3   描述 小明很想吃果子,正好果园果子熟了。在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。
934 0
NYOJ 123(插线问点)
  士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5   描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小工的任务就是在南将军询问他某个人的军功的时候,快速的报出此人的军功,请你编写一个程序来帮助小工吧。
810 0
|
网络协议
NYOJ 8
  一种排序 时间限制:3000 ms | 内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);1.
773 0