1932 - 解密类游戏--删除数字

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

小BX正在玩一个解密类游戏,但是他遇到了一个难题,这里有一些数,想要进入到下一关的话,就需要从数K中删去要求的N个数字使剩下的数字组成的数最大,为了解决这个问题,小BX请你动用编程的力量为他解决这一难题。

题目输入

有多组测试数据。

第一行有一个数T,表示有T组测试数据。

接下来的T行,每一行有两个数K和N ( 0<= K <= 2^31 ,N小于K的位数)。

题目输出

对每一组数据输出删除若干数字后剩下的数字组成的那个最大数。

输入/输出样例

输入格式

1
917845 3

输出格式

985

C语言解答

#include <stdio.h>  
#include <math.h>
#include <string.h>

//删去1个数字,使结果最大
void del(char* str)
{
	int i;
	int len = strlen(str);
	for(i=0; i<len-1; ++i)
	{
		if(str[i]<str[i+1])
		{
			strcpy(str+i,str+i+1);
			return ;
		}
	}
	strcpy(str+i,str+i+1);
}

int main()  
{  
	int i,k,n,T;
	char arr[100];
scanf("%d",&T);	
while(T--)
{
  scanf("%d%d",&k,&n);
  sprintf(arr,"%d",k);
	  for(i=0; i<n; ++i)
     del(arr);
  printf("%s\n",arr);
}	
return 0;  
} 

C++解答

#include<stdio.h>
#include<string.h>
int main()
{
     char a[200],b[200];
     int i,j,k,l,m,n;
     scanf("%d",&n);
     for (i=0;i<n;i++)
     {
         scanf("%s %d",a,&m);
         
         l=strlen(a);
         m=l-m;
         int y=0;
         if (m==0) printf("0");
         for (j=0;j<m;j++)
         {
              int x=0;
              char c='-';
              for (k=y;k<l-m+j+1;k++)
                  if (a[k]>c){c=a[k]; x=k;}
                  b[j]=c;
                  y=x+1;
         }
         for (j=0;j<m;j++)
            printf("%c",b[j]);
         printf("\n");
     }
}