1932 - 解密类游戏--删除数字
时间限制 : 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"); } }